我的老师说文件服务器程序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);
}
}
任何人都可以说出实际的原因吗?
答案 0 :(得分:2)
我认为你的意思是ObjectInputStream
和BufferedInputStream
(不是读者)。
ObjectInputStream
包装输入流并提供允许从流中读取特定类型数据的类型化方法。例如readDouble()
,readObject()
等
BufferedInputStream
未提供其他API(与常规InputStream
相比)。它唯一能做的就是缓冲数据,即它逐块读取数据,这比逐字节读取更有效。
答案 1 :(得分:1)
InputStream
是一个抽象类,可用于定义任何类型的输入流,包括从文件系统,URL,套接字等中读取。
您实际上并没有创建InputStream
,因为它本身并不意味着什么。而是创建InputStream
的类型,它定义了如何读取/写入特定类型的数据,例如建议的ObjectInputStream
。此类定义正在编写的数据是Java Object
(实现Serializable
或Externalizable
)。还有其他InputStreams
用于通用文件数据,图像,音频和一系列其他类型。
没有ObjectInputStreamReader
这样的东西,除非你自己编写一个这样的类,其目的是写一个ObjectInputStream
。
请参阅ObjectInputStream和InputStream Java文档以获取更多启示