![](/img/trans.png)
[英]What is the difference between Java's BufferedReader and InputStreamReader classes?
[英]What is the difference between ObjectInputStreamReader and InputStreamReader?
我的老師說在文件服務器程序中ObjectInputStreamReader
是強制寫的。 當我問起原因時,他說我對文件服務器程序很滿意。 我認為這不是必要的原因。 為什么不能使用InputStreamReader
或其他替代方案? ObjectInputStreamReader
比InputStreamReader
什么優勢。
這里是客戶端/服務器的代碼:
public class Client {
public static void main(String[] args) {
Socket s = null;
ObjectInputStream ois = null;
ObjectOutputStream oos = null;
Scanner sc = new Scanner(System.in);
String data = "";
try {
s = new Socket("localhost", 1234);
System.out.println("client is connectd");
ois = new ObjectInputStream(s.getInputStream());
String jai = (String) ois.readObject();
System.out.println("DATA from SERVER:" + jai);
oos = new ObjectOutputStream(s.getOutputStream());
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("Enter file name:");
try {
String fil = (String) sc.next();
OutputStream pw = new FileOutputStream(fil + ".new");
oos.writeObject(fil);
data = (String) ois.readObject();
pw.write(data.getBytes());
} catch (Exception e) {
System.out.println(e.getMessage());
}
System.out.println("Content of file:" + data);
}
}
任何人都可以說出什么是實際原因?
我認為你的意思是ObjectInputStream
和BufferedInputStream
(不是讀者)。
ObjectInputStream
包裝輸入流並提供允許從流中讀取特定類型數據的類型化方法。 例如readDouble()
, readObject()
等。
BufferedInputStream
不提供額外的API(與常規InputStream
)。 它唯一能做的就是緩沖數據,即它逐塊讀取數據,這比逐字節讀取更有效。
InputStream
是一個抽象類 ,可用於定義任何類型的輸入流,包括從文件系統,URL,套接字等讀取。
你實際上並沒有創建一個InputStream
,因為它本身並不意味着什么。 相反,您創建了一種 InputStream
類型 ,它定義了如何讀取/寫入特定類型的數據,例如建議的ObjectInputStream
。 該類定義正在編寫的數據是Java Object
(實現Serializable
或Externalizable
)。 還有其他InputStreams
用於通用文件數據,圖像,音頻和一系列其他類型。
沒有ObjectInputStreamReader
這樣的東西,除非你自己編寫一個這樣的類,其目的是寫入ObjectInputStream
。
有關更多啟示,請參閱ObjectInputStream和InputStream Java文檔
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.