簡體   English   中英

ObjectInputStreamReader和InputStreamReader有什么區別?

[英]What is the difference between ObjectInputStreamReader and InputStreamReader?

我的老師說在文件服務器程序中ObjectInputStreamReader是強制寫的。 當我問起原因時,他說我對文件服務器程序很滿意。 我認為這不是必要的原因。 為什么不能使用InputStreamReader或其他替代方案? ObjectInputStreamReaderInputStreamReader什么優勢。

這里是客戶端/服務器的代碼:

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);
    }
}

任何人都可以說出什么是實際原因?

我認為你的意思是ObjectInputStreamBufferedInputStream (不是讀者)。

ObjectInputStream包裝輸入流並提供允許從流中讀取特定類型數據的類型化方法。 例如readDouble()readObject()等。

BufferedInputStream不提供額外的API(與常規InputStream )。 它唯一能做的就是緩沖數據,即它逐塊讀取數據,這比逐字節讀取更有效。

InputStream是一個抽象類 ,可用於定義任何類型的輸入流,包括從文件系統,URL,套接字等讀取。

你實際上並沒有創建一個InputStream ,因為它本身並不意味着什么。 相反,您創建了一種 InputStream 類型 ,它定義了如何讀取/寫入特定類型的數據,例如建議的ObjectInputStream 該類定義正在編寫的數據是Java Object (實現SerializableExternalizable )。 還有其他InputStreams用於通用文件數據,圖像,音頻和一系列其他類型。

沒有ObjectInputStreamReader這樣的東西,除非你自己編寫一個這樣的類,其目的是寫入ObjectInputStream

有關更多啟示,請參閱ObjectInputStreamInputStream Java文檔

暫無
暫無

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

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