繁体   English   中英

了解getInputStream和getOutputStream

[英]Understanding getInputStream and 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();
    }
}

我有显着的,我有问题的理解。我不明白的OutputStream对象的陈述out将举行当它被分配s.getOutputStream()什么是合格的需要bufoutout.write(buf)

我已经学会了使用文件输入和输出Streams,但我不了解getinputstreamoutputstreams 。我已经google了它,在SO上以及从许多不同的书和oracle文档中读取它。 请详细讨论。

我知道如何从文件中读取以及如何写入它们。但是在这里我不明白需要传递只保存字符串的buf数组。我想问的是当in有插槽的输入流时为什么我们不能直接读它呢? 什么是套接字输入inputstreamoutputstream

我在这里发现了一些东西,这里是链接“ 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写入两个字节一时间

以供参考

  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

InputStream inOutputStream out将保存对两种类型流的引用,您可以从中读取数据或将数据写入。 不要指望它们从流本身保存值 - 相反,它们具有使用流的能力。 当您创建这些对象时,您不会发送/接收任何数据 - 您只是获取可用于发送/接收数据的对象。

out.write(buf)正在发送的内容buf在插座,以便在插槽的任何读者(你的情况, in )可以接收数据。 任何数据被发送到out将在插座的另一侧由可见InputStream

这里OutputStream用于在写出时将数据发送到套接字的另一端。写out.write(buf)它将在套接字中发送缓冲区数据。

InputStream用于从套接字接收数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM