Search code examples
javafileoutputstreamwriter

ObjectOutputStream writing extra characters


I know that writers should be used instead of outputstreams when writing text, but still I don't understand why there are extra characters in the file outputStream.txt after running this program:

public static void main(String[] args) throws FileNotFoundException, IOException
    {
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(new File("C:\\Data\\tmp\\outputStream.txt")));
        oos.writeObject("SomeObject");
        oos.writeUTF("SomeUTF");
        oos.flush();
        oos.close();
        BufferedWriter writer = new BufferedWriter(new FileWriter(new File("C:\\Data\\tmp\\outputWriter.txt")));
        writer.write("SomeObject");
        writer.write("SomeUTF");
        writer.flush();
        writer.close();
    }

The file outputWriter.txt is 17bytes, as expected, but outputStream.txt is 28, including some unrecognizable text. Why is that?


Solution

  • ObjectOutputStream is used to write Java objects to a stream. That means won't write the value of a String into the stream; instead if will write "the next object is a String and the value for it is SomeObject".

    So if you want a plain text file, you have to use the Writer API.

    Note: Your code is platform dependent. If you want to make it platform independent, then you have to use:

        FileOutputStream stream = new FileOutputStream( file );
        return new BufferedWriter( new OutputStreamWriter( stream, Charset.forName("UTF-8") ) );