package ch.elexis.connect.afinion;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class Test {
private static final int NUL = 0x00;
private static final int STX = 0x02;
private static final int ETX = 0x03;
private static final int ACK = 0x06;
private static final int DLE = 0x10;
private static final int NAK = 0x15;
private static final int ETB = 0x17;
private static final int LF = 0x0D;
private static ByteArrayOutputStream read(InputStream inputStream) throws IOException{
ByteArrayOutputStream baos = new ByteArrayOutputStream();
// <DLE><ETB> suchen
int data = inputStream.read();
while (data != -1 && data != ETB) {
while (data != -1 && data != DLE) {
baos.write(data);
data = inputStream.read();
}
if (data == DLE) { // <DLE><DLE> wird zweites DLE nicht beachtet
baos.write(data);
data = inputStream.read();
if (data != DLE) {
baos.write(data);
}
data = inputStream.read();
}
}
return baos;
}
private static void write(OutputStream outputStream, byte[] bytes) throws IOException{
for (byte b : bytes) {
write(outputStream, b);
}
}
private static void write(OutputStream outputStream, byte b) throws IOException{
outputStream.write(b);
if (b == DLE) { // Aus <DLE> wird <DLE><DLE>
outputStream.write(DLE);
}
}
private static void printlnHex(final byte[] bytes){
for (int i = 0; i < bytes.length; i++) {
String hex = Long.toHexString((long) bytes[i]);
while (hex.length() < 2) {
hex = "0" + hex;
}
System.out.print("0x" + hex + ", ");
}
System.out.println();
}
/**
* @param args
*/
public static void main(String[] args){
byte[] bArray = new byte[] {
0x09, DLE, STX, 0x01, 0x02, 0x03, 0x10, 0x10, 0x04, 0x05, DLE, ETX
};
printlnHex(bArray);
byte[] retBytes = null;
try {
ByteArrayOutputStream baos = read(new ByteArrayInputStream(bArray));
retBytes = baos.toByteArray();
printlnHex(retBytes);
} catch (Throwable t) {
t.printStackTrace();
}
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
write(baos, retBytes);
byte[] bytes = baos.toByteArray();
printlnHex(bytes);
} catch (Throwable t) {
t.printStackTrace();
}
}
}