如何使用ObjectOutputStream&(de)正确地序列化为字节数组ObjectInputStream的?

时间:2017-07-26 11:11:48

标签: java arrays stream byte

我知道ObjectOutputStream / ObjectInputStream使用标头,这不是一个正确的用例。但无论如何我需要使用接口DataInput和DataOutput将一些数据包装到其中。

import java.util.*;
import java.lang.*;
import java.io.*;

class Ideone
{
    public static void main (String[] args) throws java.lang.Exception
    {
        byte[] array = serialize("test");
        String deserialized = deserialize(array);

        System.out.println(deserialized);
    }

    private static byte[] serialize(String test) {
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();

        try {
            ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream);

            objectOutputStream.writeUTF(test);

            byteArrayOutputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return byteArrayOutputStream.toByteArray();
    }

    private static String deserialize(byte[] array) {
        String temp = null;

        try {
            ObjectInputStream objectInputStream = new ObjectInputStream(new ByteArrayInputStream(array));

            temp = objectInputStream.readUTF();

            objectInputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return temp;
    }
}

我真的不知道怎么做到这一点。我是对的,目前问题是那些标题?

1 个答案:

答案 0 :(得分:2)

在关闭objectOutputStream.flush();之前,您应该致电byteArrayOutputStream

ObjectOutputStream有它的内部缓冲区,所以你只得到字节数组中字符串的开头。