繁体   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