ここにコードがあります
_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
へ。
ファイルを使用して入出力ストリームを学習しましたが、getinputstream
とoutputstreams
がわかりません。グーグルで検索しました。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に送信する必要があるのはなぜですか?
最初に理解する必要があるのは、[〜#〜] stream [〜#〜]
ストリームは、データのシーケンスとして定義できます。 InputStreamはソースからデータを読み取るために使用され、OutputStreamはデータを宛先に書き込むために使用されます。
****次はストリームのタイプです****
we have byte stream and character stream.
classes we have in Input Stream and output stream
simple termsで名前が示すように、入力ストリームはデータの入力に使用され、出力ストリームはデータの出力に使用されます
Javabyteストリームは、8ビットバイトの入出力を実行するために使用されます。バイトストリームに関連するクラスは多数ありますが、最も頻繁に使用されるクラスは、FileInputStreamおよびFileOutputStreamです。また
Javaバイトストリームは、8ビットバイトの入出力を実行するために使用されます。ここで、Java文字ストリームは、16ビットUnicodeの入出力を実行するために使用されます。文字ストリームに関連するクラスは多数ありますが、最も頻繁に使用されるクラスは、FileReaderおよびFileWriterです。内部的にFileReaderはFileInputStreamを使用し、FileWriterはFileOutputStreamを使用しますが、ここでの大きな違いは、FileReaderは一度に2バイトを読み取り、FileWriterは一度に2バイトを書き込むことです。
参照用
getInputStreamおよびgetOutputStreamの例
新しいリンクhttp://docs.Oracle.com/javase/tutorial/essential/io/buffers.html
_InputStream in
_および_OutputStream out
_は、データの読み取りまたは書き込みが可能な2種類のストリームへの参照を保持します。ストリーム自体からの値を保持することを期待しないでください-代わりに、ストリームを操作する機能を保持します。これらのオブジェクトを作成するとき、データを送受信するのではなく、データの送受信に使用できるオブジェクトを取得するだけです。
out.write(buf)
はbuf
の内容をSocket経由で送信し、ソケットのリーダー(あなたの場合はin
)がそのデータを受信できるようにします。 out
に送信されるデータはすべて、InputStream
によってSocketの反対側に表示されます。
ここでOutputStream
は、out.write(buf)
を記述するたびにソケットの反対側にデータを送信するために使用され、ソケットでバッファデータを送信します。
InputStream
は、ソケットからデータを受信するために使用されます。