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 /** Public constructor; prefer {@link #INSTANCE} for repeated use. */ 032 public AsciiInterpreter() {} 033 /** An instance of this Interpreter. Only one needed for the whole system */ 034 public static final AsciiInterpreter INSTANCE = new AsciiInterpreter(); 035 036 /** 037 * (non-Javadoc) 038 * 039 */ 040 @Override 041 public void interpret(String data, byte[] b, int offset) 042 { 043 System.arraycopy(data.getBytes(ISOUtil.CHARSET), 0, b, offset, data.length()); 044 } 045 046 /** 047 * (non-Javadoc) 048 * 049 */ 050 @Override 051 public String uninterpret (byte[] rawData, int offset, int length) { 052 byte[] ret = new byte[length]; 053 try { 054 System.arraycopy(rawData, offset, ret, 0, length); 055 return new String(ret, ISOUtil.CHARSET); 056 } catch (IndexOutOfBoundsException e) { 057 throw new RuntimeException( 058 String.format("Required %d but just got %d bytes", length, rawData.length-offset) 059 ); 060 } 061 } 062 063 /** 064 * (non-Javadoc) 065 * 066 */ 067 @Override 068 public int getPackedLength(int nDataUnits) 069 { 070 return nDataUnits; 071 } 072}