Java 了解getInputStream和getOutputStream
这是一个密码Java 了解getInputStream和getOutputStream,java,stream,Java,Stream,这是一个密码 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
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();
}
}
我已经标记了我理解有问题的语句。我不理解当分配了OutputStream对象s.getOutputStream()
时,OutputStream对象out
将包含什么内容,以及通过out.write(buf)
将buf
传递到out
需要什么
我已经学习了使用文件的输入和输出流,但我不理解getinputstream
和outputstreams
。我已经在谷歌上搜索过它,在这里阅读过它,以及从许多不同的书籍和oracle文档中阅读过它。请详细讨论一下
我知道如何读取文件以及如何写入文件。但我不明白传递只包含字符串的buf
数组需要什么。我想问的是,当in有套接字的输入流时,为什么我们不能直接从中读取?
套接字输入流
和输出流
究竟是什么
我在这里发现了一些东西,这是链接“,这里是DNA的答案
在Java中,要通过套接字发送数据,需要从套接字获取一个OutputStream(1),然后写入OutputStream(输出一些数据)。”
这让我很困惑,当outputStream用于通过套接字发送数据时,out.write(buf)需要什么?为什么我们需要将“google.com”发送到outputStream?这里
outputStream
用于在您写入时将数据发送到套接字中的另一端。write(buf)
它将在套接字中发送缓冲区数据
InputStream
用于从套接字接收数据。InputStream in
和OutputStream out
将包含对两种类型流的引用,您可以从中读取数据或将数据写入其中。不要期望它们包含流本身的值,相反,它们具有处理流的能力。当创建这些对象时,您没有发送/接收任何数据-您只是获取可以用于发送/接收数据的对象
out.write(buf)
通过套接字发送buf
的内容,以便套接字的任何读卡器(在您的情况下,in
)可以接收该数据。发送到out
的任何数据都将通过InputStream在套接字的另一侧看到,您需要了解的第一件事是流是什么
流可以定义为数据序列。InputStream用于从源读取数据,OutputStream用于将数据写入目标
****接下来是流的类型****
we have byte stream and character stream.
正如简单术语中的名称所示输入流用于输入数据,输出流用于输出数据
Java字节流用于执行8位字节的输入和输出。虽然与字节流相关的类很多,但最常用的类是FileInputStream和FileOutputStream。
也
Java字节流用于执行8位字节的输入和输出,其中Java字符流用于执行16位unicode的输入和输出。虽然有许多类与字符流相关,但最常用的类是FileReader和FileWriter。尽管在文件内部Reader使用FileInputStream,FileWriter使用FileOutputStream,但这里的主要区别是FileReader一次读取两个字节,FileWriter一次写入两个字节
供参考
getInputStream和getOutputStream示例
新链接
发送“google.com”需要什么“到插座的另一边?我们不能直接获取inputputStream并从中读取吗?为什么我们需要先将buf写入输出流,然后只从输出流中读取?请在您的答案中写下详细信息,因为它不清楚。这就是我在谷歌上得到的,不幸的是,它不清楚您正在向另一方发送域名,并从另一方收到相应的响应。osborne.com您发送到另一端的字符串,您的意思是说osborne.com服务器正在读取保存buf数据的输出流?我是说sockets s=new Socket(“whois.internic.net”,43)代码>这将连接到whois.internic.net,您想知道的域是“osborne.com”,因此当您将此字符串发送到服务器时,它将向您发送有关“osborne.com”的信息。buf的内容是字节格式的google.com。所以我的问题是“in”会读什么\我知道什么是流,什么是输入和输出流。我不明白的是,当buf被发送到输出流时,inputstream如何读取它。输入流只获取buf的内容,而buf的内容只是一个字节形式的字符串。那么它如何从中读取?写入的目的是什么。write(buf)到套接字的输出流?这就是我所要求的。保持一个具有InetAddress google.com的套接字的输出流。写入这样一个套接字的输出流的目的是什么?这就是我要求的,我得到了除此之外的一切。我需要一个解释。不,不,你没有理解我的意思,我正在努力学习java中的套接字。尽管我非常努力,但我还是无法理解这段代码。要么我很愚蠢,要么你们没有理解我的观点和我想问的问题?当我向套接字的输出流写入buf时,谁从中读取?在重新阅读您所说的内容后,我现在理解的是套接字连接到服务器,它通过outputstream将buf发送到另一端,然后服务器读取buf并返回它要求的内容,即google.com。返回的字符串/对象存储在套接字的inputstream中?我是吗
classes we have in Input Stream and output stream