Java 从反序列化文件读取字节

Java 从反序列化文件读取字节,java,serialization,deserialization,Java,Serialization,Deserialization,我正在学习Java序列化。我已使用以下代码成功地从序列化文件中读取并使用了我的对象(忽略导入): 然而,我序列化对象的主要目的是将其推送到Redis存储。所以,对于这一点,我不需要它们是对象形式,而是字节形式。所以我将最后一个try块的内容更改为 while(true){ try{ System.out.println(ois.readByte()); } catch(EOFException eofe){ eofe.printStackTrace(

我正在学习Java序列化。我已使用以下代码成功地从序列化文件中读取并使用了我的对象(忽略导入):

然而,我序列化对象的主要目的是将其推送到Redis存储。所以,对于这一点,我不需要它们是对象形式,而是字节形式。所以我将最后一个try块的内容更改为

while(true){
   try{
        System.out.println(ois.readByte());
    } catch(EOFException eofe){
        eofe.printStackTrace();
        break;
    }
}

但这立刻引发了一个EOFEException。有什么我做错了吗?

对象流被标记。这意味着,如果您读取的信息类型与它预期的不同,则可能会混淆,从而导致EOFEException,而不是具有适当错误消息的更具意义的信息,如IllegalStateException

如果需要ObjectOutputStream写入的字节,最简单的方法是只使用内存

ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream ois = new ObjectOutputStream(baos);
ois.writeObject(object);
ois.close();
byte[] bytes = baos.toByteArray();

对象流被标记。这意味着,如果您读取的信息类型与它预期的不同,则可能会混淆,从而导致EOFEException,而不是具有适当错误消息的更具意义的信息,如IllegalStateException

如果需要ObjectOutputStream写入的字节,最简单的方法是只使用内存

ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream ois = new ObjectOutputStream(baos);
ois.writeObject(object);
ois.close();
byte[] bytes = baos.toByteArray();

如果要将实例推送到redis中,可以使用

来自的示例代码


如果要将实例推送到redis中,可以使用

来自的示例代码

// instance it
SimpleBean obj = new SimpleBean ("bean #" + i);

// get the next available object id from our Redis counter using INCR command
int id = redis.incr("SimpleBean::next_id")

// we can bind it a unique key using map (Redis "String") semantics now
String key = "objects::SimpleBean::" + id;

// voila: java object db
redis.set(key, obj);

// and lets add it to this set too since this is so much fun
redis.sadd("object_set", obj);