問題タブ [inputstream]
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 - InputStream からの読み取り中の IOException
Android プラットフォームでInputStreamから読み取り中に奇妙な問題が発生しました。これが Android 固有の問題なのか、それとも一般的に間違っているのかはわかりません。
Android 固有の唯一のものは、次の呼び出しです。
これは、Android アセットからのファイルのInputStreamを返します。とにかく、ここで私は問題に遭遇します:
read() が実行されると、IOExceptionがスローされます。奇妙なことに、2 つの連続した 1 バイト読み取り (または任意の数の 1 バイト読み取り) を実行しても、例外はありません。例では、これは機能します:
2 つの連続する 1 バイト読み取りが機能するのに、一度に両方を読み取るための 1 つの呼び出しが例外をスローする理由は何ですか? InputStreamは問題ないようです... is.available()
100 万バイト以上を返します (当然のことです) 。
スタック トレースは、次の行の直前に次の行を示しますInputStream.read()
。
バッファ サイズを 1 バイトに変更しても、エラーがスローされます。バイト配列への読み取り時にのみ例外が発生するようです。
ファイルを 100,000 バイト (元のファイルは 1,917,408 バイト) に切り詰めると、正常に動作します。特定のサイズを超えるファイルに問題はありますか?
どんな助けでも大歓迎です!
ありがとう!
java - Java: 入力ストリームを無視する - バッファがオーバーフローし、悪いことが起こりますか?
サーバーに接続しているクライアントがあります。クライアントはサーバーにいくつかのメッセージを送信しますが、それらのメッセージを使用する予定がない場合は、気にせず、メッセージの解析に時間を無駄にしたくありません。私が使用しているすべての i/o は単純な Java i/o であり、nio ではありません。
入力ストリームを作成し、そこから読み取らない場合、そのバッファがいっぱいになり、問題が発生する可能性はありますか? もしそうなら、私ができること、またはそれが見ているデータをただ捨てるように設定できるプロパティはありますか?
サーバーが入力ストリームをまったく作成しない場合はどうなるでしょうか。クライアント/送信側で問題が発生しますか?
私にお知らせください。
ありがとう、ジブ
java - 進行状況レポート用の InputStream または Reader ラッパー
そのため、ファイル データを を受け取る API にフィードしていますReader
。進行状況を報告する方法が必要です。
FilterInputStream
をラップしFileInputStream
、読み取ったバイト数とファイルの合計サイズを追跡し、一部のupdate()
進行状況を報告するために何らかのイベントを発生させる (または何らかのメソッドを呼び出す)実装を作成するのは簡単なようです。
(あるいは、読み取った絶対バイト数を報告し、他の誰かが計算を行うこともできます。他のストリーミング状況では、より一般的に役立つかもしれません。)
私はこれを以前に見たことがあり、以前に行ったことがあるかもしれませんが、コードを見つけることができず、怠け者です。誰かがそれを敷設しましたか?または、誰かがより良いアプローチを提案できますか?
1年(と少し)後…
以下のAdamskiの回答に基づいて解決策を実装しましたが、うまくいきましたが、数か月使用した後はお勧めしません. 更新が多い場合、不要な進捗イベントの発生/処理は莫大なコストになります。基本的なカウント メカニズムは問題ありませんが、プログレス ポーリングを気にかけている人は、プログレス ポーリングをプッシュするよりもはるかに優れています。
(合計サイズがわかっている場合は、1% を超える変化ごとにイベントを発生させるなどの方法を試すことができますが、実際には問題を起こす価値はありません。多くの場合、そうではありません。)
iphone - iPhone。HTTPサーバーを使用してバイナリデータストリームを確立する
iPhone用にHTTP経由で入力ストリームを確立するにはどうすればよいですか?私のプロジェクトは、バイナリデータをHTTPサーバーからiPhoneに段階的にプルすることです。パターンは、いくつかのデータをプルすることです-これは科学的なアプリです-しばらくの間それを分析し、より多くのデータをプルします。リンス、そして繰り返します。
このプロジェクトは、InputStreamに依存するデスクトップJavaアプリの移植版であり、これを行うには、メソッドreadInt、readStringなどがあります。
乾杯、ダグ
java - ダウンロードしたバイナリ ファイルを Java でディスクに書き込む
Java関数を使用できるjavascriptファイル(.js)にアドオンを書き込むことができるソフトウェアがあります(これが一般的かどうかはわかりませんが、javascriptファイルでJava呼び出しを見たことはありません)
Web サーバーからバイナリ ファイルをダウンロードし、ハード ドライブに書き込む必要があります。次のコードを試しました:
結果のファイルは有効な gzip アーカイブではなくなります。大きな間違いをしてしまったら申し訳ありませんが、私はプログラマーではなく、Java もあまり知りません。
c - Linuxのkbhit()[およびgetch()]の問題
このコードは私に機能のようなブロッキングgetch()を与えます。このコードを使用して、上矢印キーをキャプチャしようとしています。
追加: 上矢印のキーコードをキャプチャしようとすると、27、91、65文字の3文字が表示されます。if/ elseを使用すると、パターンマッチングを試行していますが、2文字しか取得できません。次のキーが押されると、次のキーがキャプチャされます。
常に特定のキー(esc、delなど)を探しながら、getchar()を使用して完全な単語をキャプチャしたいと思います。
java - InputStreamを読み取らずに空かどうかを確認するにはどうすればよいですか?
InputStream
が空かどうかを知りたいのですが、メソッドを使用していませんread()
。それを読まずにそれが空であるかどうかを知る方法はありますか?
java - 異なるレートでのInputStreamからの複数の読み取り
オンラインコンテンツ(オーディオファイルなど)を読み込もうとしています。リモートファイルへの接続を開き(たとえば、を使用してnew URL().openStream()
)、リモートをオーディオプレーヤーに渡すと、ネットワークから徐々にInputStream
読み取られます。オーディオプレーヤーライブラリがそれ以上のデータを要求しない場合、ネットワークから何も読み取らず、ライブラリがさらにデータを要求すると、再度読み取ります。InputStream
私の問題は、最初のファイルのロードプロセスが終了したらすぐに、次のオンラインオーディオファイルのキャッシュを開始したいということです。通常のを使用するInputStream
と、オーディオの再生が完了すると読み取りが完了します。これは、ネットワーク帯域幅が許せばより速く読み取り、次のオーディオファイルをキャッシュするため、適切ではありません。私のオーディオファイルは3MBよりも小さいので、メモリに安全にキャッシュできます。1つのファイルのみをプリフェッチするので、メモリリークの問題はありません。
InputStream
同時読み取りも可能にするタイプのキャッシングはありますか?その後、スレッドを実行して、オーディオプレーヤーがデータを消費するよりも速くオーディオをキャッシュできます。
java - Javaソケット:InputStream.read()とBufferedReader.read()
ソケットのInputStreamから読み取っています。受信データをその場で解析しているため、文字ごとに読み取る必要があります。
BufferedReader.read()
と同じことをInputStream.read()
しますか?(BufferedReaderがInputStreamをベースとして構築されていると仮定します)
各文字を個別に読み取るときにInputStream.read()を使用する方が効率的ですか?それとももっと良い方法はありますか?
java - 入力ストリームを出力ストリームに接続する
似たようなスレッドをいくつか見ましたが、必要なものではありません。
サーバーは基本的にクライアント (クライアント A) から入力を受け取り、それをバイトごとに別のクライアント (クライアント B) に転送します。
クライアント A の入力ストリームをクライアント B の出力ストリームに接続したいのですが、可能ですか? それを行う方法は何ですか?
また、これらのクライアントは相互にメッセージを送信していますが、これは時間の影響を受けやすいため、バッファリングは機能しません。たとえば 500 のバッファーは必要なく、クライアントが 499 バイトを送信すると、サーバーはバッファーを満たす最後のバイトを受信していないため、500 バイトの転送を保留します。
現在、各メッセージを解析して長さを確認し、長さバイトを読み取ってから転送しています。これは非常に遅いため、バイトを読み取って何度も転送するよりも優れていると考えました (そしてテストしました)。また、前の段落で述べた理由から、バッファーやタイマーを使用したくなかったのです。バッファーがいっぱいではないという理由だけで、メッセージが通過するまで非常に長い時間待機することは望ましくありません。
これを行う良い方法は何ですか?