【问题标题】:Issue while converting java object to byte array将java对象转换为字节数组时出现问题
【发布时间】:2017-06-30 10:28:45
【问题描述】:

我正在使用反射来获取一个包含字符串作为值的对象。然后我将此对象转换为字节数组并保存到文件中。 当我打开文件时,在预期的字符串前面附加了一些额外的字符。

FileOutputStream fos = new FileOutputStream("C:\\Temp\\test.txt");
 Object obj = new String("Hello World"); //replaced reflection code with string object ,still not working
 fos.write(toByteArray(obj));
 fos.close();


public static byte[] toByteArray(Object obj) throws IOException {
        byte[] bytes = null;
        ByteArrayOutputStream bos = null;
        ObjectOutputStream oos = null;
        try {
            bos = new ByteArrayOutputStream();
            oos = new ObjectOutputStream(bos);
            oos.writeObject(obj);
            oos.flush();
            bytes = bos.toByteArray();
        } finally {
            if (oos != null) {
                oos.close();
            }
            if (bos != null) {
                bos.close();
            }
        }
        return bytes;
    }

文件中的输出:

文件中的预期输出:

Hello World

我不知道为什么这个额外的字符出现在我的原始字符串前面,同时将对象转换为字节数组。大家能帮我看看吗

【问题讨论】:

    标签: java arrays string object byte


    【解决方案1】:

    您正在使用 java.io.ObjectOutputStream 对象在其中写入字符串。
    您不会在文件中获得人工表示形式的输出,而是字符串的序列化形式。

    要在输出文件中获得String 的人工表示,您应该使用PrintStream 而不是使用方法:public void println(String x)

    【讨论】:

      【解决方案2】:

      ObjectOutputStream#writeObject 通过序列化的方式将对象写入输出流。序列化允许开发人员轻松地将对象保存在磁盘上或通过网络传输。

      https://docs.oracle.com/javase/7/docs/api/java/io/ObjectOutputStream.html#writeObject(java.lang.Object)

      因此,在您的情况下,它存储 String 类的实例,而不是编写“Hello World”的字符,

      我建议阅读序列化:https://www.tutorialspoint.com/java/java_serialization.htm

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-07-10
        • 2022-01-07
        • 1970-01-01
        • 2018-09-08
        • 2016-08-06
        • 2021-01-27
        • 2021-11-30
        • 2012-02-14
        相关资源
        最近更新 更多