【发布时间】:2015-10-01 09:07:08
【问题描述】:
我正在阅读有关 java 网络(客户端/服务器)的本教程,我对一些我不明白的事情有疑问。
https://docs.oracle.com/javase/tutorial/networking/sockets/readingWriting.html
我经常看到这种情况
BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in))
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
和
BufferedReader inputStream = new BufferedReader(new FileReader("xanadu.txt"));
PrintWriter outputStream = new PrintWriter(new FileWriter("characteroutput.txt"));
我知道 BufferReader 的构造函数是
BufferedReader(Reader in)
1) 我还知道,由于 InputStreamReader 是由 Reader 类继承的,因此您可以通过 BufferedReader 构造函数传递它。但我的问题是为什么我们需要 InputStreamReader?是不是因为 InputStreamReader 可以保存一个输入流(根据它在 API 中的构造函数)
编辑:我犯了错误,请忽略这个
2) 现在对于下一部分,inputStream 和 outputStream(根据 API)是从 Object 类继承的。这两个类如何分别分配为 BufferedReader 和 PrintWriter。这是因为它们都被对象类继承,还是它们的另一个原因?因为如果是这种情况,那么任何人都将如何知道您可以将什么分配为类,就好像一切都应该由 Objects 类继承一样。3) 最后但并非最不重要的一点是,这里还有一个关于 BufferedReader 和 PrintWriter 的问题
BufferedReader inputStream = new BufferedReader(new FileReader("xanadu.txt"));
PrintWriter outputStream = new PrintWriter(new FileWriter("characteroutput.txt"));
为什么这两个类,选择通过 FileReader 和 FileWriter 类的引用?
我想我想了解更多关于为什么选择这些特定课程的信息。
提前致谢!
【问题讨论】:
-
您没有显示 inputStream 和 outputStream 的实际类型。如果它们真的是 InputStream 和 OutputStream,不,那个赋值是行不通的。
-
你的问题揭示了一个误解,在考虑继承问题之前你应该澄清这个误解:Java 中的二进制与文本。您可能想阅读this。
-
@pvg 你的权利,我把那部分搞砸了,谢谢
-
@fge 有些说得通,谢谢
标签: java inheritance java-io