// Copyright FreeHEP, 2007-2009 package org.freehep.util.io; import java.io.IOException; import java.io.Writer; /** * The JavaArrayOutputStream writes out the text in java to compile into a byte * array. * * @author Mark Donszelmann */ public class JavaArrayWriter extends IndentPrintWriter implements FinishableOutputStream { private final static int MAX_ENTRIES_PER_LINE = 8; private String author; private String arrayName; private int entries; private boolean start; private boolean end; public JavaArrayWriter(Writer out, String arrayName, String author) { super(out); this.arrayName = arrayName; this.author = author; entries = MAX_ENTRIES_PER_LINE; start = true; end = false; } @Override public void write(int b) { start(); String s = Integer.toHexString(b & 0x00FF); switch (s.length()) { case 1: writeEntry(("0" + s).substring(0, 2)); break; case 2: writeEntry(s); break; default: System.err.println("ERROR " + getClass() + ": byte '" + b + "' was encoded in less than 1 or more than 2 chars"); } } private void start() { if (start) { start = false; super.indent(); super.println("// START: Generated Code by " + author); super.println("private final byte[] " + arrayName + " = new byte[] {"); super.indent(); } } public void finish() { if (!end) { end = true; super.println(); super.outdent(); super.println("}; // " + arrayName); super.println("// END: Generated Code by " + author); super.outdent(); flush(); if (out instanceof FinishableOutputStream) { try { ((FinishableOutputStream) out).finish(); } catch (IOException e) { System.err.println("ERROR " + getClass() + ": " + e); } } } } @Override public void close() { finish(); super.close(); } private void writeEntry(String s) { if (entries == 0) { entries = MAX_ENTRIES_PER_LINE; super.println(); } entries--; super.print("(byte)0x"); super.print(s); super.print(", "); } }