在序列化机制中,我们使用objectinputstream和object outputstream将对象写入流中。这些对象通过网络传输。在此机制中使用Object输入/输出流。所以我可以使用File INPUT / OUTPUT Streams而不是调用序列化标记界面?。
答案 0 :(得分:2)
我猜你正在混淆序列化和通用I / O.
序列化是一种将对象转换为字节序列(返回,称为反序列化)的方法。这样,您就可以通过网络传输可序列化的对象并将它们存储到文件中。
文件输入/输出流用于存储/从文件中读取任何类数据。
答案 1 :(得分:1)
当您需要在网络上传输对象时,需要对其进行序列化。以下链接可能对您有用。
http://java.sun.com/developer/technicalArticles/Programming/serialization/
答案 2 :(得分:1)
文件I / O和序列化是两回事。文件I / O用于读/写文件。序列化接口用于对象的二进制解释。所以不,你不能使用文件流来通过网络发送。(可能有一些使用文件流通过网络发送数据的解决方法,但它就像试图用汽车飞行)
答案 3 :(得分:1)
首先让我们专注于定义: 序列化:这是将对象状态转换为可以以相同方式存储和重建的格式的过程。
而在文件I / O 中,它可以存储数据结构或对象,然后以相同的方式重建。 这就是我们使用序列化或数据库查询方法(如sql,mongodb)的原因。
JSON / XML也可以使用其解析器进行序列化。
举一个javascript的例子(不是java,但是把它当作语言不可知):
var obj = { // it's an object in javascript (same like json)
a: "something",
b: 3,
c: "another"
};
现在,如果您尝试使用此文件i / o保存在文件中(例如abc.txt),它将保存为字符串 这意味着以后可以通过读取此文件(abc.txt)来访问其他代码:
// readThisFile();
// obj.a;
但是如果你使用序列化(在本机使用JSON的javascript中),你可以从文件中读取它
答案 4 :(得分:0)
由于流是添加剂,您可以执行类似
的操作FileOutputStream fos = new FileOutputStream("/some/file/to/write/to");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(someObject);
不确定这是你问的问题,但很难说。
答案 5 :(得分:0)
序列化/反序列化用于读取和写入对象,这不仅会产生压缩数据,这些数据是不可读的,但也会以二进制形式写入。文件I / O用于读写。您似乎不想序列化,如果不这样做,请不要使用它。用文本读写文件。
答案 6 :(得分:0)
在序列化机制中,我们使用将对象写入s流
ObjectInputStream
和ObjectOutputStream
。
确定
这些对象通过网络传递。在这种机制中使用a ObjectInput / Output流。
我跟着你。
我可以使用文件输入/输出流而不是调用 序列化标记界面?。
在这里你失去了我。您的意思是通过网络发送对象还是只是序列化它?
当然,您可以使用任何输入/输出流以及ObjectInput / ObjectOutput流将对象序列化到不同的媒体。
例如:
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("jedis.bin"));
out.writeObject(new Jedi("Luke"));
将对象序列化为名为jedis.bin
的文件代码
ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
ObjectOputStream out = new ObjectOutputStream(byteStream);
out.writeObject(new Jedi("Luke"));
将对象序列化为内存数组。
因此,任何输出/输入流都可以用作ObjectInput / ObjectOutput流使用的基础流。