ObjectOutputStream写入额外的字符

Lui*_*Sep 5 java outputstream file writer

我知道在编写文本时应该使用编写器而不是输出流,但我仍然不明白为什么outputStream.txt在运行此程序后文件中有额外的字符:

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();
    }
Run Code Online (Sandbox Code Playgroud)

outputWriter.txt正如预期的那样,该文件是17字节,但是outputStream.txt是28,包括一些无法识别的文本.这是为什么?

Aar*_*lla 7

ObjectOutputStream用于将Java对象写入流.这意味着不会将String的值写入流中; 相反,如果将写"下一个对象是a String,它的值是SomeObject".

因此,如果您需要纯文本文件,则必须使用WriterAPI.

注意:您的代码取决于平台.如果您想使其独立于平台,那么您必须使用:

    FileOutputStream stream = new FileOutputStream( file );
    return new BufferedWriter( new OutputStreamWriter( stream, Charset.forName("UTF-8") ) );
Run Code Online (Sandbox Code Playgroud)