簡體   English   中英

為什么我應該在Java中使用序列化而不是文件I / O

[英]Why should i use Serialization instead of File I/O in java

在序列化機制中,我們使用objectinputstream和object outputstream將對象寫入流中。這些對象通過網絡傳遞。在這種機制中,使用Object輸入/輸出流。那么我可以使用File INPUT / OUTPUT Streams代替調用序列化標記接口嗎? 。

我猜您正在混淆序列化和常規I / O。

序列化是一種將對象轉換為字節序列(反過來又稱為反序列化)的方法。 這樣,您可以通過網絡傳輸可序列化的對象並將其存儲到文件中。

文件輸入/輸出流用於向文件存儲/從文件讀取任何類型的數據。

首先讓我們集中討論定義:序列化:這是將對象狀態轉換為可以稍后以相同方式存儲和重建的格式的過程

而在文件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),它將被保存為字符串,這意味着以后無法通過讀取此文件的其他代碼來訪問它。 txt),如下所示:

// readThisFile();

// obj.a;

但是,如果您使用序列化(在使用JSON的javascript中),則可以從文件中讀取序列化

當您需要在網絡上傳輸對象時,需要對其進行序列化。 以下鏈接可能對您有用。

http://java.sun.com/developer/technicalArticles/Programming/serialization/

文件I / O和序列化是兩件事。 文件I / O用於讀取/寫入文件。 序列化接口用於對象的二進制解釋。 因此,不,您不能使用文件流通過網絡發送數據(也許有一些解決方法可以使用文件流通過網絡發送數據,但是就像試圖乘汽車飛行一樣)

由於流是加性的,因此您可以執行以下操作

FileOutputStream fos = new FileOutputStream("/some/file/to/write/to");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(someObject);

不確定這是您要的內容,但是很難說。

序列化/反序列化用於讀取和寫入對象,這不僅使無法讀取的壓縮數據還以二進制形式寫入。 文件I / O用於讀取和寫入。 看來您不想序列化,否則請不要使用它。 讀取和寫入文本文件。

在序列化機制中,我們使用ObjectInputStreamObjectOutputStream將對象寫入s流。

這些對象通過網絡傳遞。在這種機制中,使用ObjectInput / Output流。

我在跟着你。

那么我可以使用文件輸入/輸出流而不是調用序列化標記器接口嗎?

在這里,你失去了我。 您是要通過網絡發送對象還是只是對其進行序列化?

當然,您可以使用任何Input / 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流使用的基礎流。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM