将java对象转换为字节数组时出现问题

时间:2017-06-30 10:28:45

标签: java arrays string object byte

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

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;
    }

文件中的输出:

enter image description here

文件中的预期输出:

Hello World

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

2 个答案:

答案 0 :(得分:2)

您正在使用<input type="text" name="username" v-model="user.name" :value="'The user name is: '+user.name"> 对象在其中写入字符串 你不会在文件中输出人类表示,而是字符串的序列化形式。

要获得输出文件中写入的java.io.ObjectOutputStream的人工代表,您应该使用String并使用方法:PrintStream

答案 1 :(得分:1)

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

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

因此,在您的情况下,它存储String类的实例,而不是写&#34; Hello World&#34;,

的字符

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