了解getInputStream和getOutputStream
这是一个代码
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.write(buf)
将buf
传递给out
。
我已经学会了使用文件输入和输出Streams,但我不了解getinputstream
和outputstreams
。我用google搜索它,在SO上以及从许多不同的书和oracle文档中读取它。 请详细讨论。
我知道如何从文件中读取以及如何写入它们。但是在这里我不明白需要传递只保存字符串的buf
数组。我想要问的是当in有插槽的输入流时为什么我们不能直接读它呢? 什么是套接字输入inputstream
和outputstream
?
我在这里发现了一些东西,这里是链接“ Java Networking:在Socket中解释InputStream和OutputStream ”,这里的答案由DNA说
在Java中,要通过套接字发送数据,可以从中获取OutputStream(1),并写入OutputStream(输出一些数据)。“
这让我感到困惑,当outputStream用于通过socket发送数据时需要out.write(buf)为什么我们需要将“google.com”发送到outputStream?
您需要了解的第一件事是什么是STREAM
流可以定义为数据序列。 InputStream用于从源读取数据,OutputStream用于将数据写入目标。
****接下来是流的类型****
we have byte stream and character stream.
classes we have in Input Stream and output stream
顾名思义, 简单来说,输入流用于输入数据,输出流用于输出数据
Java 字节流用于执行8位字节的输入和输出。 尽管有许多与字节流相关的类,但最常用的类是FileInputStream和FileOutputStream。 也
Java 字节流用于执行8位字节的输入和输出,其中Java 字符流用于执行16位unicode的输入和输出。 虽然有许多与字符流相关的类,但最常用的类是FileReader和FileWriter ..虽然内部FileReader使用FileInputStream而FileWriter使用FileOutputStream,但主要区别在于FileReader一次读取两个字节而FileWriter写入两个字节一时间
以供参考
-
什么是InputStream和输出流? 我们为何以及何时使用它们?
-
java DataOutputStream getOutputStream()getInputStream()
getInputStream和getOutputStream的示例
新链接 http://docs.oracle.com/javase/tutorial/essential/io/buffers.html
这里OutputStream
用于在写出时将数据发送到套接字的另一端。写out.write(buf)
它将在套接字中发送缓冲区数据。
InputStream
用于从套接字接收数据。
InputStream in
和OutputStream out
将保存对两种类型流的引用,您可以从中读取数据或向其写入数据。 不要指望它们从流本身保存值 – 相反,它们具有使用流的能力。 当您创建这些对象时,您不会发送/接收任何数据 – 您只是获取可用于发送/接收数据的对象。
out.write(buf)
通过Socket发送out.write(buf)
的内容,以便socket的任何读者(在你的情况下, in
)都可以接收该数据。 无论发送到何处的数据都将通过InputStream
在Socket的另一侧看到。