【问题标题】:Extra odd symbols are added to serialization output额外的奇数符号被添加到序列化输出中
【发布时间】:2018-06-07 11:13:45
【问题描述】:

我正在尝试通过编写自己的代码来序列化字符串对象以获取该对象的字节数组,而不是使用 string.getBytes() 但我在输出中得到了额外的奇怪符号跟随

The output

import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutput;
import java.io.ObjectOutputStream;
import java.util.Arrays;

public class Demo {

    private static final String OUTPUT_FILE = "D:\\testFile.txt";

    public static void main(String[] args) throws IOException {

        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        ObjectOutput out = null;
        byte[] bytes;

        String content = "Hello Java Code Geeks";

        out = new ObjectOutputStream(bos);
        out.writeObject(content);
        out.flush();
        bytes = bos.toByteArray();

        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

        outputStream.write(bytes);


        System.out.println(Arrays.toString(outputStream.toByteArray()));
        System.out.println(outputStream.toString());

        // Write the internal buffer to an output stream
        outputStream.writeTo(new FileOutputStream(OUTPUT_FILE));

    }
}

PS:我应该使用 java.io.OutputStream 类,但如果有任何其他方法可以从我的方法或 以外的对象获取 ByteArray string.getBytes() 随意提出建议。

不使用 string.getBytes() 的原因是需要一种从任何类型的对象(包括用户定义对象)获取字节数组的通用方法。

【问题讨论】:

  • 这听起来可能是编码问题。你的源字符串在序列化之前有什么字符集?
  • @Tim Biegeleisen 我声明我的字符串如下 String content = "Hello Java Code Geeks";如何知道我的源字符串在序列化之前的字符集?

标签: java arrays serialization outputstream


【解决方案1】:

你需要把它当作一个对象来阅读

public static void main(String[] args) throws IOException, ClassNotFoundException {

    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    ObjectOutput out = null;
    byte[] bytes;

    String content = "Hello Java Code Geeks";

    out = new ObjectOutputStream(bos);
    out.writeObject(content);
    out.flush();
    bytes = bos.toByteArray();

    ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

    outputStream.write(bytes);

    System.out.println(Arrays.toString(outputStream.toByteArray()));
    System.out.println(outputStream.toString());
    // correct string printed out
    System.out.println(new ObjectInputStream(new ByteArrayInputStream(outputStream.toByteArray())).readObject());

}

ObjectOutputStream 将附加信息写入文件(例如类名等),这些可能是您想知道的字符。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-04
    • 1970-01-01
    • 2013-04-06
    • 2014-04-23
    相关资源
    最近更新 更多