/* * [TestByteArrayOutputStream.java] * * Summary: Testing ByteArrayOutputStream. Demonstrates finish gotcha. * * Copyright: (c) 2011-2017 Roedy Green, Canadian Mind Products, http://mindprod.com * * Licence: This software may be copied and used freely for any purpose but military. * http://mindprod.com/contact/nonmil.html * * Requires: JDK 1.8+ * * Created with: JetBrains IntelliJ IDEA IDE http://www.jetbrains.com/idea/ * * Version History: * 1.0 2011-11-27 initial version */package com.mindprod.example;import org.apache.commons.io.output.ByteArrayOutputStream;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.ObjectOutputStream;import java.io.OutputStream;import java.util.zip.GZIPOutputStream;import static java.lang.System.*;/** * Testing ByteArrayOutputStream. Demonstrates finish gotcha. * <p/> * You must do a close() before the toByteArray or use finish. * Also shows how to construct complex byte arrays. * * @author Roedy Green, Canadian Mind Products * @version 1.0 2011-11-27 initial version * @since 2011-11-27 */public final class TestByteArrayOutputStream{/** * write an integer object to a file in compressed format * * @throws IOException if cannot write file */private static void writeToFile()throws IOException{// O P E Nfinal File o = new File("temp.ser");final FileOutputStream fos = new FileOutputStream(o );final OutputStream gzos = new GZIPOutputStream(fos, 1024/* buffsize */ );final ObjectOutputStream oos = new ObjectOutputStream(gzos );// W R I T Eoos.writeObject(new Integer(149 ));// F L U S Hoos.flush();// C L O S Eoos.close();out.println("file size: "+ o.length());}/** * write an integer object to a buffer in RAM in compressed format * * @throws IOException if cannot write file */private static void writeToRAM()throws IOException{// O P E Nfinal ByteArrayOutputStream baos = new ByteArrayOutputStream(1024 );final GZIPOutputStream gzos = new GZIPOutputStream(baos, 1024/* buffsize */ );final ObjectOutputStream oos = new ObjectOutputStream(gzos );// W R I T Eoos.writeObject(new Integer(149 ));byte[]result0 = baos.toByteArray();out.println("RAM result before flush "+ result0.length + " oops");// F L U S Hgzos.finish(); // necessary unless you do toByteArray() after close.oos.flush();byte[]result1 = baos.toByteArray();out.println("RAM result after flush "+ result1.length + " oops");// C L O S Eoos.close();// you don't get accurate results until AFTER the close!!byte[]result2 = baos.toByteArray();out.println("RAM result after close "+ result2.length + " ok");}/** * Testing ByteArrayOutputStream * * @param args not used */public static void main(String[]args )throws IOException{writeToFile();writeToRAM();// output// file size: 94// RAM result before flush 10 oops// RAM result after flush 10 oops// RAM result after close 94 ok}}