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。