Java ObjectInputStreamReader和InputStreamReader之间的区别是什么?

Java ObjectInputStreamReader和InputStreamReader之间的区别是什么?,java,inputstream,objectinputstream,Java,Inputstream,Objectinputstream,我的老师说,在文件服务器程序中,ObjectInputStreamReader是必须编写的。当我问他原因时,他说我对文件服务器程序很满意。我认为这不是必要的理由。为什么不能使用InputStreamReader或其他替代品?ObjectInputStreamReader比InputStreamReader有什么优势 以下是客户端/服务器的代码: public class Client { public static void main(String[] args) { S

我的老师说,在文件服务器程序中,
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);
    }
}

有人能说出什么是真正的原因吗?

输入流是一个抽象类,可用于定义任何类型的输入流,包括从文件系统、URL、套接字等读取

实际上,您并没有创建一个
InputStream
,因为它本身并不意味着什么。相反,您可以创建一种类型的
InputStream
,定义如何读取/写入特定类型的数据,例如建议的
ObjectInputStream
。此类定义正在写入的数据是Java
对象
(实现
可序列化
可外部化
)。还有其他
InputStreams
,用于通用文件数据、图像、音频和一系列其他类型

没有所谓的
ObjectInputStreamReader
,除非您自己编写这样一个类,其目的是写入
ObjectInputStream


有关更多信息,请参阅和Java文档

一个
InputStream
是一个抽象类,可用于定义任何类型的输入流,包括从文件系统、URL、套接字等进行读取

实际上,您并没有创建一个
InputStream
,因为它本身并不意味着什么。相反,您可以创建一种类型的
InputStream
,定义如何读取/写入特定类型的数据,例如建议的
ObjectInputStream
。此类定义正在写入的数据是Java
对象
(实现
可序列化
可外部化
)。还有其他
InputStreams
,用于通用文件数据、图像、音频和一系列其他类型

没有所谓的
ObjectInputStreamReader
,除非您自己编写这样一个类,其目的是写入
ObjectInputStream


请参阅和Java文档以获得更多启示

我认为您指的是
ObjectInputStream
BufferedInputStream
(不是读者)

ObjectInputStream
包装输入流并提供类型化方法,允许从流中读取特定类型的数据。例如
readDouble()
readObject()


BufferedInputStream
不提供额外的API(与常规
InputStream
相比)。它所做的唯一事情就是缓冲数据,即逐块读取数据,这比逐字节读取数据更有效

我想你指的是
ObjectInputStream
BufferedInputStream
(不是阅读器)

ObjectInputStream
包装输入流并提供类型化方法,允许从流中读取特定类型的数据。例如
readDouble()
readObject()


BufferedInputStream
不提供额外的API(与常规
InputStream
相比)。它所做的唯一事情就是缓冲数据,即逐块读取数据,这比逐字节读取数据更有效

没有“ObjectInputStramReader”这样的类。甚至没有“ObjectInputStreamReader”。请注意,您的示例代码使用ObjectInputStream—这里没有“Reader”部分。ObjectInputStream和InputStreamReader完全不同。。。但是你还没有告诉我们你想要实现什么。没有“ObjectInputStramReader”这样的类。甚至没有“ObjectInputStreamReader”。请注意,您的示例代码使用ObjectInputStream—这里没有“Reader”部分。ObjectInputStream和InputStreamReader完全不同。。。但是你还没有告诉我们你想达到什么目的。有任何强制读取文件的冲动我必须使用ObjectInputStraemReader。有任何强制读取文件的冲动我必须使用ObjectInputStraemReader。