[英]Reading bytes from a deserialized file
我将在本教程之后学习Java序列化。 我已经使用以下代码(省略了导入)从序列化文件中成功读取并使用了我的对象:
public class SimpleSerializationTest {
static class Person implements Serializable{
String name;
int age;
boolean isMale;
static final long serialVersionUID = 314L;
}
public static void main(String[] args) throws Exception{
Person p = new Person();
p.name = "Mark";
p.age = 20;
p.isMale = true;
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("mark.ser"));
try{
oos.writeObject(p);
} catch(IOException ioe){
ioe.printStackTrace();
} finally{
oos.close();
}
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("mark.ser"));
try{
// NOTE: Will change this later!
Person mark = (Person) ois.readObject();
System.out.println(mark.name);
} catch(IOException ioe){
ioe.printStackTrace();
} finally{
ois.close();
}
}
}
但是,序列化对象的主要目的是可以将其推送到Redis存储。 因此,为此,我不需要以对象形式而是字节形式。 所以我将最后一个try块的内容更改为...
while(true){
try{
System.out.println(ois.readByte());
} catch(EOFException eofe){
eofe.printStackTrace();
break;
}
}
但这会立即引发EOFException。 我做错了什么吗?
对象流被标记。 这意味着,如果您阅读的信息类型与期望的信息类型不同,则可能会感到困惑,从而导致EOFException,而不是像IllegalStateException这样的有意义的错误消息。
如果要由ObjectOutputStream写入的字节,最简单的操作是仅使用内存。
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream ois = new ObjectOutputStream(baos);
ois.writeObject(object);
ois.close();
byte[] bytes = baos.toByteArray();
如果您想将实例推送到redis,则可以使用JRedis 。
来自文档的示例代码。
// 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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.