問題タブ [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 - Android/Java の新しい標準に合わせて DataInputStream を処理する
生ファイルを読み取るAndroidアプリで次のようなメソッドがありました:
ただし、DataInputStream オブジェクトは現在非推奨になっているようです。調べてみたところ、 を で囲んだほうがいいと聞きましreadline()
たBufferedInputStream
。誰か私が彼の文章を完成させるのを手伝ってくれませんか (欠けている行を埋める)? br
varの宣言方法がわかりません。これは私がこれまでに持っているものです:
このメソッドを呼び出す、まだ触れていない前のコードを次に示します。
また、Android 2.3 から 4.2 (現在) まで動作することを確認したいと思います。助けてくれてありがとう。
java - BufferedReaderのパフォーマンスがBufferedInputStreamよりもはるかに悪いのはなぜですか?
生のバイトを文字に変換する必要があるため、BufferedReaderの使用(FileReaderのラッピング)はBufferedInputStreamの使用(FileInputStreamのラッピング)よりも大幅に遅くなることを理解しています。しかし、なぜそんなに遅いのかわかりません!これが私が使用している2つのコードサンプルです:
と:
さまざまなバッファサイズを使用してテストを試しましたが、すべて150メガバイトのファイルです。結果は次のとおりです(バッファサイズはバイト単位、時間はミリ秒単位)。
ご覧のとおり、BufferedInputStreamの最速時間(64ミリ秒)は、BufferedReaderの最速時間(465ミリ秒)の7倍です。上で述べたように、大きな違いはありません。しかし、これだけの違いは不合理に思えます。
私の質問は次のとおりです。BufferedReaderのパフォーマンスを改善する方法、または代替メカニズムについて誰かが提案を持っていますか?
java - 別のオブジェクトが停止した場所から読み取りを開始する新しいバッファリーダーオブジェクトを作成するにはどうすればよいですか?
大きなファイルを1行ずつ読み取り、重複する行を削除するバッファ付きリーダーがあります。
ファイル全体をメモリにロードする代わりに、2つのバッファリーダーを使用してこれを実行します。最初のリーダーは、ファイルの固定部分を反復処理し、各部分を1つずつメモリにロードします。
各反復で、2番目のバッファリングされたリーダーは、最初のリーダーが停止した場所からファイルの最後まで、ロードされた部分がファイルに存在しないことを確認します。
問題は、最初のオブジェクトが停止した位置から開始するために、新しい独立したバッファリングされたリーダーオブジェクト(参照ではない)を作成できないことです。
最初のバッファリングされたリーダーのファイル位置を見つけて、2番目のバッファリングされたリーダーにどこから始めればよいかを伝える方法が必要です。
私がこれまでに試したこと:
最初のオブジェクトを2番目のコンストラクターに送信します。
これは実際には機能しましたが、両方に同じイテレータがあったため、最初のイテレータは2番目のイテレータとともにファイルの最後に移動しました
bufferedReader.mark()
バッファリングされたリーダーの位置を設定しますが、それでも最初のリーダーの位置を知る必要があります。
ノート:
- 行数は一定ではありません
- ファイル全体をメモリにロードできません
- 時間と記憶の両方が問題です
java - JavaでBufferedInputStreamをバイト配列に置き換える
次のコードは、BufferedInputStreamを使用してファイルからデータを読み取り、チャンクで処理します。このコードを変更して、ファイルからストリームを介してデータを取得するのではなく、バイト配列からデータを取得するようにします。私はすでにファイルのデータをバイト配列に読み込んでおり、ファイルストリームからのデータを処理する代わりに、これをwhile...loopを使用して配列データを処理したいと考えています。方法がわからない:
java - JavaBufferedInputStreamプログレスバー
JProgressBar
HTTPダウンロードのステータスを表示するのに少し問題があります。
以下に示すように、プログレスバーは機能していますが、いっぱいになるのが早すぎて、最終的に最大値をかなり上回ります。
問題はbytesDownloaded
、ファイルの最後でlenよりもはるかに大きくなってしまうことです。in.read()
実際には、ファイル内の最大バイト数またはその他の値が返されますか?前者はJava7APIからのものと想定していますが、私の調査結果と一致していません。
このスニペットを2.69MBのファイルでテストしています。
これは、printlnステートメントからの出力です(最後の数行)
ダウンロードされたバイト数:3821490のうち371525502
ダウンロードされたバイト数:2821490のうち371525526
ダウンロードされたバイト数:2821490のうち371525681
ダウンロードされたバイト数:2821490のうち371525788ダウンロードされたバイト
数:2821490のうち371526228
ダウンロードされたバイト数:2821490のうち371526222ダウンロードされた バイト
数:2821490のうち371526442
ダウンロード:2821490のうち371526697ダウンロードされた
バイト:2821490から371526914
2821490
これが2.69MBの正しいバイト値であることがわかったので、私の質問が残ります。なぜread()
、BufferedInputStreamの関数が、ファイルの読み取りバイトの終わりをとして表示するのです371526914
か。これが実際にバイトである場合、ファイルは明らかに約350MBに相当します。いいえ!
何か案は?
java - 大きなファイルを読みながらアクションを実行するjava
私はJavaとチャットプログラムを作成しており、TCPとシリアル化可能なオブジェクトを介して通信を行っています。チャットでもファイルを交換できますが、ファイルが大きすぎる場合(ビデオファイル)、ファイルの読み込みとオブジェクトの送信プロセスが完了するまでインターフェイスがフリーズします。ファイルの読み込み中にメッセージを表示する必要があります。これは私のコードです:
この行「bis.read(byteArray);」の間にメッセージを表示する必要があります。行がインターフェイスがフリーズする理由であると私が信じているので、読んでいます。byteArrayがロードされた後、それをオブジェクトに配置し、ソケット接続を介して送信します。
また、サーバー上でビデオファイルを開き、接続されたクライアントに分割して送信して再生するためだけに、ライブではなくビデオストリーミングが必要です。誰かが私にチュートリアルやヒントを教えてもらえますか?ありがとう。
c++ - バッファからのレコードの読み取り
読むべき巨大なファイルがあります。ディスクからデータ (4mb) を読み取り、6 つの要素 (それぞれ 4mb) の円形配列に格納する IO スレッドがあります。循環バッファーから読み取り、データをいくつかのレコードに変換する別のスレッドがあります。
問題は、2 つの異なるバッファーにまたがるレコードを持つことができることです (つまり、レコードが最初のバッファーの終わりから始まり、次のバッファーの始まりまで拡張できるとします)。
このような場合はどのように処理すればよいですか?
いくつかのサンプル実装を指摘していただけますか?
java - Javaでファイルに何度も書き込む方法は?
以前に同じ質問をしましたが、与えられた答えをすべて試しましたが、誰も私のプログラムに賛成しませんでした。ファイルに書き込むメソッドを作成し、このファイルを別のメソッドで使用します。私の問題は、別の機会に書きたいときです。ファイルの先頭から始めたいので内容を消去します。if exist delete
これは、私が使用するときの私のクラスです。そうBufferedWriter bw = new BufferedWriter(new FileWriter(f, false));
しないと、実行の最後の行だけになります。そして、しばらくの間、読み取りと書き込みにいくつかのファイルを使用できないようにしたいと思います。
java - BOS/BIS 進行中
BufferedInputStream と BufferedOutputStream を使用したアップロードがあり、このアップロードの進行状況をパーセンテージで取得したいと考えています。
これはどうやって手に入れるの??