web-dev-qa-db-ja.com

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が保持するか、およびbufを渡す必要性はわかりません。 out.write(buf)によるoutへ。

ファイルを使用して入出力ストリームを学習しましたが、getinputstreamoutputstreamsがわかりません。グーグルで検索しました。SOと同様に多くの異なる本やOracleのドキュメントからも詳細に議論してください。

私はファイルから読み取る方法とそれらに書き込む方法を知っていますが、ここでは、文字列のみを保持するbuf配列を渡す必要があるか理解していません。ソケットの入力ストリームは、なぜそれから直接読み取ることができないのですか?ソケットinputstreamおよびoutputstreamとは正確には何ですか?

ここで何かを見つけましたSOここにリンクがあります " Java Networking:Explain InputStream and OutputStream in Socket "

Javaでは、ソケット経由でデータを送信するには、そこからOutputStream(1)を取得し、OutputStreamに書き込みます(データを出力します)。

OutputStreamを使用してソケット経由でデータを送信する場合、out.write(buf)が必要なのはなぜですか。「google.com」をoutputStreamに送信する必要があるのはなぜですか?

11
Junaid Shirwani

最初に理解する必要があるのは、[〜#〜] stream [〜#〜]

ストリームは、データのシーケンスとして定義できます。 InputStreamはソースからデータを読み取るために使用され、OutputStreamはデータを宛先に書き込むために使用されます。

****次はストリームのタイプです****

 we have byte stream and character stream.

enter image description here

classes we have in Input Stream and output stream 

enter image description here

simple termsで名前が示すように、入力ストリームはデータの入力に使用され、出力ストリームはデータの出力に使用されます

Javabyteストリームは、8ビットバイトの入出力を実行するために使用されます。バイトストリームに関連するクラスは多数ありますが、最も頻繁に使用されるクラスは、FileInputStreamおよびFileOutputStreamです。また

Javaバイトストリームは、8ビットバイトの入出力を実行するために使用されます。ここで、Java文字ストリームは、16ビットUnicodeの入出力を実行するために使用されます。文字ストリームに関連するクラスは多数ありますが、最も頻繁に使用されるクラスは、FileReaderおよびFileWriterです。内部的にFileReaderはFileInputStreamを使用し、FileWriterはFileOutputStreamを使用しますが、ここでの大きな違いは、FileReaderは一度に2バイトを読み取り、FileWriterは一度に2バイトを書き込むことです。

参照用

  1. InputStreamとOutput Streamとは何ですか?なぜ、いつ使用するのですか?

  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

34
Divya

_InputStream in_および_OutputStream out_は、データの読み取りまたは書き込みが可能な2種類のストリームへの参照を保持します。ストリーム自体からの値を保持することを期待しないでください-代わりに、ストリームを操作する機能を保持します。これらのオブジェクトを作成するとき、データを送受信するのではなく、データの送受信に使用できるオブジェクトを取得するだけです。

out.write(buf)bufの内容をSocket経由で送信し、ソケットのリーダー(あなたの場合はin)がそのデータを受信できるようにします。 outに送信されるデータはすべて、InputStreamによってSocketの反対側に表示されます。

1
David Koelle

ここでOutputStreamは、out.write(buf)を記述するたびにソケットの反対側にデータを送信するために使用され、ソケットでバッファデータを送信します。

InputStreamは、ソケットからデータを受信するために使用されます。

0
Smit Shilu