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