【发布时间】:2014-04-29 03:05:36
【问题描述】:
这是代码
import java.io.*;
import java.net.*;
public class Whois
{
public static void main(String[] args)
throws Exception
{
// TODO Auto-generated method stub
int c;
Socket s = new Socket("whois.internic.net",43);
*InputStream in = s.getInputStream();
*OutputStream out = s.getOutputStream();
String str = (args.length == 0 ? "osborne.com" : args[0] ) + "\n";
byte buf[] = str.getBytes();
*out.write(buf);
System.out.print("hey baby");
while ((c=in.read()) != -1)
{
System.out.print((char) c);
}
s.close();
}
}
我已经标记了我无法理解的陈述。我不明白当分配s.getOutputStream() 时,OutputStream 对象out 将持有什么以及通过out.write(buf) 将buf 传递给out 的需要是什么。
我已经学习了使用文件的输入和输出流,但我不明白getinputstream 和outputstreams。我已经用谷歌搜索了它,在 SO 以及许多不同的书籍和 oracle 文档中阅读它。请详细讨论。
我知道如何读取文件以及如何写入文件,但在这里我不明白传递只包含一个字符串的 buf 数组有什么需要。我要问的是,当有套接字的输入流时,为什么我们不能直接从中读取呢?
套接字inputstream 和outputstream 到底是什么?
我在这里找到了一些东西,这里是链接“https://stackoverflow.com/questions/12715321/java-networking-explain-inputstream-and-outputstream-in-socket”,这里是 DNA 的回答说
在 Java 中,要通过套接字发送数据,您需要从中获取 OutputStream (1),然后写入 OutputStream(输出一些数据)。"
这让我很困惑,当 outputStream 用于通过套接字发送数据时,out.write(buf) 需要什么?为什么我们需要将“google.com”发送到 outputStream?
【问题讨论】: