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