問題タブ [bufferedoutputstream]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
23681 参照

java - パフォーマンスの観点から、FileOutputStream を BufferedOutputStream でラップすることはどの時点で意味がありますか?

ディスクへのバイトの読み取り、処理、および書き込みを担当するモジュールがあります。バイトは UDP 経由で受信され、個々のデータグラムが組み立てられた後、処理されてディスクに書き込まれる最終的なバイト配列は、通常 200 バイトから 500,000 バイトの間になります。場合によっては、アセンブリ後に 500,000 バイトを超えるバイト配列が存在することがありますが、これらは比較的まれです。

私は現在、FileOutputStreamwrite(byte\[\])メソッドを使用しています。また、パラメーターとしてバッファー サイズを受け入れるコンストラクターを使用するなど、 をFileOutputStreamaにラップすることも試しています。BufferedOutputStream

を使用するBufferedOutputStreamとパフォーマンスがわずかに向上する傾向にあるようですが、さまざまなバッファー サイズを試し始めたばかりです。使用するサンプル データのセットは限られています (アプリケーションを介してパイプできるサンプル実行からの 2 つのデータ セット)。書き込み中のデータについて知っている情報を考慮して、ディスク書き込みを減らし、ディスク書き込みのパフォーマンスを最大化するための最適なバッファー サイズを計算するために適用できる一般的な経験則はありますか?

0 投票する
1 に答える
192 参照

format - LISP: (format) 成功した場合にのみ出力 (read)

私は、Paul Graham のANSI Common Lispという本を読んでいます。次の例があります。

次のように動作する必要があります。


$ (質問番号)

番号を入力してください。a

番号を入力してください。(ホ ハム)

番号を入力してください。52

52


しかし、試してみると(SBCL 1.0.55)、読み取りが成功するまでフォーマット文字列が出力されません:


$ (質問番号)

a

(ホ ハム)

52

番号を入力してください。番号を入力してください。番号を入力してください。

52


エラーはどこにありますか?意図したとおりに動作させるにはどうすればよいですか?

0 投票する
2 に答える
738 参照

java - BufferedOutputStreamに(byte [] b)を書き込むとどうなりますか?(Java)

メソッドwrite(byte [] b)を使用してBufferedOutputStreamに書き込む場合、FilterOutputStreamのwriteメソッドが使用されます。ドキュメントには次のように書かれています。

「FilterOutputStreamのwriteメソッドは、引数b、0、およびb.lengthを持つ3つの引数のwriteメソッドを呼び出します。」

3つの引数を持つどの書き込みメソッドを参照していますか?FilterOutputStreamにあるもの、またはBufferedOutputStreamにあるもの?(つまり、書き込みは実際にバッファリングされていますか?)

そうだと思いますが、よくわかりません。

0 投票する
4 に答える
4494 参照

java - BufferedOutputStreamは実際に低レベルでどのように機能しますか?

私は背後にある理論を理解していBufferedOutputStreamます。バイトは、バッファアレイがいっぱいになるまで書き込まれ、その後、基になるストリームに書き込まれます(フラッシュされます)。これは、OS呼び出しが少ないため、バイトごとに書き込むよりも高速であるという考え方です。

ただし、BufferedOutputStreamクラスとメソッド(BufferedOutputStream.java)の実装を見ると、最終的には、バッファーからのバイトがバイトごとに書き込まれているように見えます。

私はこれが事実だと思います:

BufferedOutputStream.write(byte b []、int off、int len)には、out.write(b、off、len)という行があります。outはOutputStreamのインスタンスですが、BufferedOutputStreamではないため、OutputStream.write(byte []、int、int)を呼び出しています。これは、forループを使用してバイトごとに書き込みます

誰かが実際に何が起こっているのか、そしてそれがどのように速いのかを明確にできますか?

0 投票する
2 に答える
31036 参照

java - BufferedInputStreamをbyte[]に入れて、ソケットを介してデータベースに送信します

私はこれに対する答えを探していましたが、実際には何も見つかりませんでした。今日の初めに、バイト配列を使用してファイルを文字列に変換し、後で取得するために再度戻す方法を尋ねました。

人々が私に言ったことは、厄介なエンコーディングの問題を避けるために、バイト配列を格納するだけでよいということでした。だから今、私はそれに取り組み始めました、しかし私は今壁にぶつかりました。

基本的に、以前はバッファなしのストリームを使用して、ファイルをバイト配列に変換していました。これは理論的にはうまく機能しますが、多くのメモリを消費し、最終的にヒープサイズの例外が発生します。代わりにバッファリングされたストリームを使用する必要があります(またはそう言われています)。現在の問題は、BufferedInputStreamからbyte[]に移行することです。このドキュメントにある方法をコピーして使用しようとしました

http://docs.guava-libraries.googlecode.com/git/javadoc/index.html?com/google/common/io/package-summary.html

バッファリングされていないストリームをバッファリングされたストリームと交換する場所。唯一の問題は、バッファリングされていないストリームの場合のように、バッファリングされた出力ストリームをバイト配列に直接変換できないことです。

ヘルプ?:)

編集:

まだヒープスペースエラーが発生しています。だから私は今すべてのコードを投稿します:

main.java

BufferedByteStream.java

0 投票する
4 に答える
1338 参照

java - BufferedOutputStream を使用して、while ループでバイトをファイルに書き込みます。助けが必要

BufferedOutputStream を使用してファイルにバイトを書き込もうとしていますが、これを while ループで動作させる必要があります。これは、TFTP サーバーで動作することを意味します。まったく何もないファイルを書き込みます(これは無意味です)。誰でもこれで私を助けることができますか?

0 投票する
1 に答える
1299 参照

java - BufferedOutputStream がすべてをファイルに書き込んでいない

TFTP サーバーを作成しようとしていますが、ファイルを受信すると、すべてがサーバーに保存されていないようです (一部のバイトが欠落しています)。ファイルは正常に作成され、大部分のデータが書き込まれますが、ファイルが完全ではないため、破損していて開くことができないと分類されます。この問題を解決する方法を知っている人はいますか?

メインクラス

WRQクラス

0 投票する
1 に答える
2122 参照

java - Android-BufferedOutputStreamはフラッシュしません

BufferedOutputStreamに問題があります。ソケット接続を介してAndroidデバイスからJavaサーバーにkmlファイルを送信したいと思います。(接続は正常です。プログラムの他の部分でPrintWriterとデータを交換することはすでに可能です)

kmlファイルを送信するために、バッファをいっぱいにします。しかし、flush()しても、何も起こりません。

inFileは、kmlファイルを読み取るために使用されるストリームです。ソケットのOutputStreamを使用するBufferedOutputStreamです。

アウトオブジェクトを閉じませんが、閉じたくありません。一度だけ使用しません。そしてこれが問題です...close()メソッドはバッファのデータを送信しますが、ソケットも閉じます。flush()メソッドはバッファのデータを送信しません。

ソケットを閉じずにバッファをフラッシュしたい。

mySocket.shutdownOutput();も使用しようとしました。

この方法では、ストリームを閉じてソケットを開いたままにします。これが私が望んでいることです。しかし、新しい出力ストリームを開こうとすると、例外java.net.SocketException:ソケット出力がシャットダウンされます

では、sokcetを閉じずにバッファをフラッシュする方法は、新しい出力ストリームを開くことができませんか?

0 投票する
4 に答える
1473 参照

java - Java BufferedOutputStream: 書き込むバイト数

これは技術的な問題というより良心の問題です:p サーバーからファイルをダウンロードするための Java コードを書いています...そのために、BufferedOutputStream メソッドの write() と BufferedInputStream メソッドの read() を使用しています。 .

だから私の質問は、バイトを保持するためにバッファを使用する場合、読み取るバイト数はいくつですか? 確かに、int byte = read() と write(byte) だけを使用してバイトからバイトを読み取ることができます。または、バッファーを使用することもできます。2 番目のアプローチを取る場合、毎回読み取り/書き込みするバイト数を定義するときに注意しなければならない側面はありますか? この数はプログラムにどのような影響を与えますか?

ありがとう