3

私はこの記事を読んでいました。次のスニペットがあります

OutputStream output = new FileOutputStream("c:\\data\\output-text.txt");

while(moreData) {
  int data = getMoreData();
  output.write(data);
}
output.close();

それは言及されています:

OutputStreams一度に1バイトずつ、バイトベースのデータを書き込むために使用されます。anのwrite()メソッドは、書き込むバイトのバイト値を含むanOutputStreamを取ります。int

Hello World文字列をファイルに書き込んでいるとしましょう。そのため、文字列内の各文字はメソッドをint使用して変換されます。getMoreData()そして、それはどのように書かれますか?output-text.txt?の文字またはバイトとして バイトで書き込まれる場合、バイトを文字に「再変換」する必要がある場合、バイトで書き込む利点は何ですか?

4

4 に答える 4

2

この記事は不完全です。なぜなら、には、 、引数と一緒に、または単一のOutputStreamを受け取る書き込み用のメソッドがオーバーロードされているからです。byte[]byte[]offsetlengthint

Stringストリームにa を書き込む場合、インターフェイスが しかOutputStreamない (たとえば、基になる実装が何かわからない) 場合は、 を使用する方がはるかに優れていますoutput.write(string.getBytes())。一度に 1 つずつ繰り返し剥がしintてファイルに書き込むと、バイト配列を渡す write を 1 回呼び出す場合と比較して、パフォーマンスが大幅に低下します。

于 2013-09-11T01:46:37.463 に答える
1

ストリームはバイトで動作し、単純に生データを読み書きします。

リーダーとライターは、UTF-8 や US-ASCII などの文字セットを使用して、基になるデータを文字列として解釈します。これは、8 ビット文字 (ASCII) を取り、データを UTF-16 文字列に変換できることを意味します。

ストリームはバイトを使用し、リーダー/ライターは文字列 (またはその他の複雑な型) を使用します。

于 2013-09-11T01:36:32.120 に答える
0

Java.io.OutputStream クラスは、バイトの出力ストリームを表すすべてのクラスのスーパークラスです。バイトが OutputStream に書き込まれるとき、バイトがすぐに書き込まれない可能性があります。代わりに、書き込みメソッドがバイトをバッファーに入れる可能性があります。

以下のような書き方があります。

  1. void 書き込み (バイト [] b)

このメソッドは、指定されたバイト配列からこの出力ストリームに b.length バイトを書き込みます。

  1. void write(byte[] b, int position, int length)

このメソッドは、オフセット位置から始まる指定されたバイト配列から length バイトをこの出力ストリームに書き込みます。

  1. 無効な書き込み (int b)

このメソッドは、指定されたバイトをこの出力ストリームに書き込みます。

于 2016-12-25T16:16:37.590 に答える