問題タブ [bufferedinputstream]
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.
java - Java BufferedOutputStream: 書き込むバイト数
これは技術的な問題というより良心の問題です:p サーバーからファイルをダウンロードするための Java コードを書いています...そのために、BufferedOutputStream メソッドの write() と BufferedInputStream メソッドの read() を使用しています。 .
だから私の質問は、バイトを保持するためにバッファを使用する場合、読み取るバイト数はいくつですか? 確かに、int byte = read() と write(byte) だけを使用してバイトからバイトを読み取ることができます。または、バッファーを使用することもできます。2 番目のアプローチを取る場合、毎回読み取り/書き込みするバイト数を定義するときに注意しなければならない側面はありますか? この数はプログラムにどのような影響を与えますか?
ありがとう
java - AndroidRandomAccessFileとファイルシステムバッファー
RandomAccessFileがバッファリングを使用しないことを知っています(FileInputStreamの場合とは異なり、明らかにBufferedInputStreamと組み合わせることはできません)。
ランダムなファイル位置から多くの小さなデータを読み取る必要があるため(連続して到着するため、並べ替えることはできません)、RandomAccessFileは理想的です。私の質問:ファイルシステムはまだバッファリングを行っていますね。したがって、厳密に依存するべきではありませんが、それぞれに近い読み取りがハードウェアに到達しないことは期待できますか?(読み取りがブロックベースであると仮定すると、ファイルシステムは読み取られたブロックをバッファリングできます)
私のアプリケーションは、SDカードとAndroidデバイスの電話メモリの両方にインストールできます。AndroidはLinuxをベースにしていますが、ファイルシステムのバッファリングがどのように機能するか、読み取りが電話のメモリからのものかSDカードからのものかによって異なるかどうかはわかりません。
java - Java DataInputStream と BufferedInputStream
ソケット接続からサーバーへの非同期メッセージ (さまざまなサイズ) を受信して処理するための効率的なソリューションを探しています。これは十分な量の帯域幅です (おそらく 250 kB/秒の定常状態で、最大 1 MB/秒の短いバーストを持つことができます)。現在、私は DataInputStream を使用していますが、忙しい瞬間に切断されます (キューのバックログが大きくなりすぎると、サーバーはクライアントを切断します)。
BufferedInputStream がより適切に機能するかどうか、誰でも確認できますか? バイトごとではなく、一度にデータのチャンクを取得することを読んだので、OS 呼び出しが少なくなります。
ありがとう!
stream - 行バッファのように動作するバッファなしストリーム
私はストリームについて読んでいて、setvbuf() 関数を使用してストリームを制御できることがわかりました...改行が検出され、バッファリングされていない場合、ラインバッファモードストリームでデータをファイルに送信するように書かれていました。 ..だから私は次のコードを書いた...
これらはバッファリングされていないストリームであるため、画面に書き込むとすぐに入力を標準出力に送信する必要があると思います...しかし、プログラムは各行を書き込んだ後にEnterキーを押すのを待ってから、出力のみが画面に表示されました( fwrite の結果)...私の質問は、これらがバッファリングされていないストリームであるのに、なぜプログラムがエンター(つまり、改行)を待っていたのかということです...
android - 大きな画像 (サイズ > 300K) をダウンロードするときに、inputstream.read が応答しません。
こんにちは、みんな。大きなサイズの画像をダウンロードするときに問題があります。ストリームからバイトを読み取っても常に応答がないのに、非常に奇妙です。私のコードは次のとおりです。どんな提案も大歓迎です。
java - ソケット: BufferedOutputStream または単に OutputStream?
Java で TCP を介して最速の転送速度を得るには、こちらの方が優れています。
オプション A:
オプション B:
8 KiB を超えて OutputStream に書き込むとパフォーマンスが低下することを読みましたが、一度に 8 KiB を超えるのではなく、小さなチャンクで書き込むことをお勧めしました。8 KiB は、BufferedOutputStream のデフォルトのバッファー サイズです。
ただし、ネット経由でデータを転送するときは、できるだけ早くバイトをフラッシュするのが良いことも読んだことがあります。バッファを使用して小さなチャンクで書き込むと、不要なオーバーヘッドが追加されることを意味します。
では、選択肢 A か選択肢 B か。どれが一番うまくいきますか?
現時点では、オプション A がオプション B よりもはるかに多くの CPU を消費しながら最高の転送速度を提供すると推測しています。
--
おまけの質問: TCP ウィンドウ サイズに手を加えるのは良い考えですか? たとえば、64 KiB に設定すると、次のようになります。
速度を上げることができると読んだので、テストマシンで128 KiBに設定しようとしましたが、サーバーがいくつかの接続を取得したとき、CPUは放置したときのように〜2%ではなく100%でした. トラフィックの急増を処理できる優れたサーバーがない限り、128 KiB は高すぎると思いますが、32 KiB のような値に設定するのは賢明でしょうか? 私の場合、デフォルトは 8 KiB だったと思います。
(「ソケット」は「java.net.Socket」)
java - 一貫性のない BufferedInputStream read(byte[]) 動作
BufferedInputStream.read(byte[]) についての私の理解では、読み取り操作は pos から始まり、バイト配列がいっぱいになるか、ストリームの終わりが発生するまで読み取ります。
以下の BufferedInputStream で readInt メソッドを呼び出しています。
Eclipse デバッガーで実行を追跡すると、stream.read(buffer4)
呼び出しは、最初の pos 値に関係なく、通常、pos の値が 4 に設定され、読み込まれた 4 バイトは入力ストリームからの最初の 4 バイトになります。read(byte[]) 呼び出しは、特定の状況でストリームを静かにリセットしますか? もしそうなら、いつですか? これは意図した動作のようです (これは私のコードではありません)。このように動作すると、プログラムは正常に機能します。
私が経験している問題は、Windows でのみ、入力ストリームに特定のコンテンツが含まれている場合 (この場合、アップストリームのソケットがドロップされたためにエラー メッセージが表示される場合) にのみ、この pos のリセットが意図されていると思われる場合に発生しないことがあります。これにより、メソッドはストリーム内の不適切な位置から読み取り、不適切な値を返します。
Solaris でも同じコードを使用しています。このプラットフォームではデバッガーのステップスルーを行っていませんが、Solaris ではプログラムは正常に動作し、修正しようとしているバグは発生しません。私が認識していないストリームにプラットフォーム固有の問題がある可能性はありますか?
ありがとう。
java - BufferOutputStream は、ファイルをマージするときにゼロバイトを書き込みます
n個のファイルをマージして単一のファイルにしようとしています。しかし、関数で奇妙な動作が発生しました。関数はn秒間にx回呼び出されます。マージするファイルが 100 個あるとします。毎秒 5 つのファイルを呼び出してマージします。次の 1 秒で量は 2 倍の 10 になりますが、1 ~ 5 は前と同じファイルで、残りは新しいファイルです。それは正常に動作しますが、ある時点でゼロバイトになるか、適切なサイズになります。
以下の関数の間違いを見つけるのを手伝ってくれませんか?
*私の英語でごめんなさい
java - BufferedInputStreamは利用できないと言っていますが、とにかく機能します
in.available()> 0がコメントアウトされているのに、なぜこれがうまく機能するのか誰かが私に説明できますが、私がそれを元に戻すと壊れますか?
具体的には、ユーザーが用語を検索できるAndroidアプリを作成しています。その検索はスペース内の何かに送信され、結果はxml形式で返され、それらを使用して処理を行います。返されるxmlが十分に小さい場合(上記のコードの「長さ」を参照)、コードはin.available()> 0が残っていても問題なく機能します。ただし、長さが大きい場合、in.available()は0を返します。しかし、それがコメントアウトされているので、すべてがスムーズに実行され続けます。
何故ですか?そして、それは私が心配して修正する必要があるものですか?
java - BufferedInputStream が大量の入力を受け取っていない
私はJavaで比較的新しく、行と列の合計数が2と1000の間にあるバイナリマトリックスを入力として取り込もうとしています.BufferedInputStreamを使用しています.小さなマトリックスの場合、私のコードは機能しています(正しい出力を与えます)たとえば、4x4 マトリックス。しかし、6x9 入力では機能しません。実は私はUVAの問題番号12367を解決しようとしています.
私のコード
次のような入力の場合:
(1 はテスト ケースの数、4 4 は行列の次元、残りは行列の要素)
出力は「ケース 1: 両方 4」ですが、これは予想されるものですが、以下のような入力の場合は -
出力がありません。デバッグ時に、すべての行列要素を読み取る前に、メインスレッドからステップ実行しているため、プログラムが実行されていないことがわかりました。
誰でも問題がどこにあるのか教えてもらえますか:(バッファサイズに関連していますか?