001/* 002 * jPOS Project [http://jpos.org] 003 * Copyright (C) 2000-2026 jPOS Software SRL 004 * 005 * This program is free software: you can redistribute it and/or modify 006 * it under the terms of the GNU Affero General Public License as 007 * published by the Free Software Foundation, either version 3 of the 008 * License, or (at your option) any later version. 009 * 010 * This program is distributed in the hope that it will be useful, 011 * but WITHOUT ANY WARRANTY; without even the implied warranty of 012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 013 * GNU Affero General Public License for more details. 014 * 015 * You should have received a copy of the GNU Affero General Public License 016 * along with this program. If not, see <http://www.gnu.org/licenses/>. 017 */ 018 019package org.jpos.iso; 020 021 022/** 023 * Implements ASCII Interpreter. Strings are converted to and from ASCII bytes. 024 * This uses the US-ASCII encoding which all JVMs must support. 025 * 026 * @author joconnor 027 * @version $Revision$ $Date$ 028 */ 029public class AsciiInterpreter implements Interpreter 030{ 031 /** An instance of this Interpreter. Only one needed for the whole system */ 032 public static final AsciiInterpreter INSTANCE = new AsciiInterpreter(); 033 034 /** 035 * (non-Javadoc) 036 * 037 */ 038 @Override 039 public void interpret(String data, byte[] b, int offset) 040 { 041 System.arraycopy(data.getBytes(ISOUtil.CHARSET), 0, b, offset, data.length()); 042 } 043 044 /** 045 * (non-Javadoc) 046 * 047 */ 048 @Override 049 public String uninterpret (byte[] rawData, int offset, int length) { 050 byte[] ret = new byte[length]; 051 try { 052 System.arraycopy(rawData, offset, ret, 0, length); 053 return new String(ret, ISOUtil.CHARSET); 054 } catch (IndexOutOfBoundsException e) { 055 throw new RuntimeException( 056 String.format("Required %d but just got %d bytes", length, rawData.length-offset) 057 ); 058 } 059 } 060 061 /** 062 * (non-Javadoc) 063 * 064 */ 065 @Override 066 public int getPackedLength(int nDataUnits) 067 { 068 return nDataUnits; 069 } 070}