了解getInputStream和getOutputStream

Jun*_*ani 11 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);
        *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();
    }
}
Run Code Online (Sandbox Code Playgroud)

我有显着的,我有问题的理解.我不明白的OutputStream对象的语句out时,它被分配将持有s.getOutputStream()的,什么是合格的需要bufout通过out.write(buf).

我已经学习了输入和输出Streams使用文件,但我不明白getinputstreamoutputstreams.我用谷歌搜索它,在这里读取它以及许多不同的书和oracle文档.请详细讨论.

我知道如何从文件中读取以及如何写入它们.但是在这里我不明白传递buf数组的必要性只包含一个字符串.我想问的是,当in中有socket的输入流时为什么我们不能直接读它吗?什么是插座inputstreamoutputstream

我在这里发现了一些东西,这里是链接" Java Networking:在Socket中解释InputStream和OutputStream ",这里的答案由DNA说

在Java中,要通过套接字发送数据,可以从中获取OutputStream(1),并写入OutputStream(输出一些数据)."

这让我很困惑,当outputStream用于通过socket发送数据时需要out.write(buf)为什么我们需要将"google.com"发送到outputStream?

Div*_*vya 34

您需要了解的第一件事是什么是STREAM

流可以定义为数据序列.InputStream用于从源读取数据,OutputStream用于将数据写入目标.

****接下来是溪流类型****

 we have byte stream and character stream.
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

classes we have in Input Stream and output stream 
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

顾名思义,简单来说 输入流用于输入数据,输出流用于输出数据

Java 字节流用于执行8位字节的输入和输出.尽管有许多与字节流相关的类,但最常用的类是FileInputStream和FileOutputStream.也

Java 字节流用于执行8位字节的输入和输出,其中Java 字符流用于执行16位unicode的输入和输出.虽然有许多与字符流相关的类,但最常用的类是FileReader和FileWriter ..虽然内部FileReader使用FileInputStream而FileWriter使用FileOutputStream但是主要区别在于FileReader一次读取两个字节而FileWriter写入两个字节一时间

以供参考

  1. 什么是InputStream和输出流?我们为何以及何时使用它们?

  2. java DataOutputStream getOutputStream()getInputStream()

getInputStream和getOutputStream的示例

  1. http://zerioh.tripod.com/ressources/sockets.html

新链接 http://docs.oracle.com/javase/tutorial/essential/io/buffers.html

  • 我现在理解的是,在重新阅读你所说的是套接字连接到服务器之后,它通过其输出流向服务器端发送buf,服务器比读取它并返回它要求的内容google.com返回的字符串/对象是否存储在套接字的输入流中?我对吗? (2认同)