問題タブ [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.

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

java - BufferedInputStreamがファイル内のランダムシークで機能しない

私のファイルへの書き込み手順は次のとおりです(私が非クラスター化と呼んでいるモードで)

  1. ファイルの現在の位置にオブジェクトを書き込みます。別のファイル(インデックスファイルと呼ばれる)への書き込みの位置に注意して、オブジェクトをどこに配置したかがわかります。
  2. ゼロバイトを書き込んで、いくらかのスペース(ランダムに1/2/3/4 KBのスペース)を残します
  3. 手順1と2を繰り返します

ここで、ファイルからオブジェクトを読み戻すことにしました。しかし、私は使用したかったBufferedInputStream。ただしBufferedInputStream、ObjectInputStream内をカプセル化すると、一部のオブジェクトを読み取った後にエラーが発生します。これは、1つのバッファ読み取りの後に発生すると推測しています(つまり、バッファに収まる限り多くのオブジェクトが1回読み取られ、次にエラーが発生したとき)。

一方FileInputStream、作品の中に直接カプセル化するObjectInputStreamことは問題ありません。

必要に応じて、ファイル書き込みコードも提供します。以下のコードについては、お気軽にお問い合わせください。

}

}

これはエラーの原因となっている変更です: ois = new ObjectInputStream(new BufferedInputStream(fis, 4096));代わりにois = new ObjectInputStream(fis);

エラーはjava.io.StreamCorruptionException: invalid type code : 00

編集 :

私は今問題を理解しました。私のfisが新しい位置に配置されている間、私のbisはその新しい位置にスキップされていませんでした。代わりに、bisは古い位置からのみ読み取ろうとしていたため、例外が発生しました。

0 投票する
3 に答える
1603 参照

java - datainputstreamとbufferedinputstreamを使用してファイルを受信して​​いるときに無限ループに陥った

DataInputStreamとBufferedInputStreamを使用してクライアントからファイルを受信するサーバープログラムを構築しようとしています。

これが私のコードで、無限ループに陥ります。これは、available()を使用していないためだと思いますが、よくわかりません。

なぜそれが無限ループに陥るのか誰か教えてもらえますか?利用できないための場合、使い方を教えてください。私は実際にグーグルで検索しましたが、使い方に戸惑いました。どうもありがとうございます

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

java - BufferInputStream でのダウンロードが正しく機能しない

次のコードではファイルをダウンロードできません (ところで clen はファイルの長さです)。

...しかし、これはうまくいきます:

2 番目のコード セグメントはすばやく動作するのに、なぜだろうと思っています。その点で、byte[] バッファを使用する特定の理由はありますか (それは高速ではないようで、BufferedInputStream は既に独自のバッファを使用しているためです....?)

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

android - Web から画像をダウンロードするときに URL の空白を処理するにはどうすればよいですか?

私は、URL に空のスペースが含まれる場合があるプロジェクトに取り組んでいます (常にではありません)。

私のコード:

失敗するのは次の行です: InputStream input = new BufferedInputStream(url.openStream(), 8192);

a: java.io.FileNotFoundException.

特定の行をエンコードしようとしましたが、キッカーは次のとおりです。サーバーはファイルを見つけるために空のスペース " " を必要とするため、何らかの形で空のスペースが必要です。Firefox ブラウザーを使用すると、ファイル (jpg) を見つけることができます。どんな助けでも大歓迎です。

編集の更新:さて、URL のホスト部分の後のすべてのビットを utf-8 にエンコードしようとしました。空白には + と %20 の両方を使用してみました。これでファイルを DL できますが、ファイルに問題があるため読み取ることができません。

update2 の編集: %20 で間違いを犯しましたが、動作します。

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

java - CPU を消費する BufferedInputStream available()

ソケットから (TCP プロトコルを介して) メッセージを読み取っていますが、CPU が BufferedInputStream の available() メソッドを呼び出すのに多くの時間を費やしていることに注意してください。これは私のコードです:

read=buffer.read()また、利用可能な関数を使用する代わりに intと checkを使用しようとしましif (read!=-1)たが、この場合、メッセージの終わりを認識できません...私の StringBuilder 'readCharacter' には、複数のメッセージがあります。他の後..そしてそれは私の解析プロセスの失敗を引き起こします...

available()チェックを使用する代わりに、readCharacter一度に1つのメッセージしかありません..そして解析が機能します...

その理由と、CPU の消費を回避する方法を理解するのを手伝ってもらえますか?

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

java - 別のクラスから BufferedReader に書き込む

別のクラスから BufferedReader 入力に書き込むメソッドが必要です。

クラス AI では、ユーザーから入力を取得するためBufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));に とを使用str = stdin.readLine();します。ユーザーはこの入力を受け取り、フォーマットして で出力しSystem.out.printlnます。

クラスBからクラスAに入力を与えて、クラスAがそれを実行して印刷できるようにしたいことがわかりました。

それを行う方法はありますか?

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

java - Java の BufferedInputStream を使用して大きなファイルを MySQL データベースに保存するときに java.lang.outOfMemoryError を取得する

私は現在、Java を使用して MySQL 5.5 データベースに大きなファイルを格納する実験を行っています。私のメイン クラスは FileDatabaseTest と呼ばれます。次のメソッドがあります。

データベースには「FILES」テーブルという 1 つのテーブルしかなく、次の列があります。

小さなドキュメントをアップロードするときはプログラムは正常に動作しますが、20MB などのファイルをアップロードすると、アップロード プロセスが非常に遅くなります。そこで、次のコードで FileInputStream を BufferedInputStream の中に入れてみました。

アップロードプロセスが非常に高速になりました。ファイルを別のディレクトリにコピーするようなものです。しかし、400MB を超えるファイルをアップロードしようとすると、次のエラーが発生しました。

そのため、MySQL の代わりに組み込みの Apache-Derby データベースを使用してみましたが、エラーは発生しませんでした。BufferedInputStream を使用して、Derby データベースに 500MB から 1.5G のファイルをアップロードできました。また、大きなファイルをアップロードする際に MySQL サーバーで BufferedInputStream を使用すると、JVM が大量のメモリを消費しているのに対し、Derby データベースで使用すると、JVM のメモリ使用量は約 85MB から 100MB に維持されることがわかりました。

私は MySQL に比較的慣れていないため、デフォルトの構成を使用しています。構成で変更したのは「max_allowed_pa​​cket」サイズだけで、最大 2GB のファイルをデータベースにアップロードできます。だから私はエラーがどこから来たのだろうか。MySQL または MySQL コネクタ/J のバグですか? または私のコードに何か問題がありますか?

ここで達成しようとしているのは、Java ヒープ スペースを増やすことなく、Java を使用して大きなファイル (最大 2GB) を MySQL サーバーにアップロードできるようにすることです。

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

java - Javaでソケットを介して整数またはバイト配列を転送する方法

はい、私は太陽のチュートリアルを見ましたが、私の場合は役に立たず、最初のコマンドのみを転送しました。

方法があります

送信側で、および

受け取る側で。charまたはcharのASCII番号を送信するのに完全に機能します。必要なのは、このコードを変更して、char の代わりに整数または単にバイト配列を送信することです。InputStream と OutputStream だけをそのままにしておくと、最初のコマンドを受け取り、それで終わりですが、これらのメソッドは sendTo を介して送信されたものを継続的に受け取ります。ソケットのドキュメントでさえ、文字のみを送信する例しかありません。

0 投票する
3 に答える
1809 参照

java - BufferedInputStream .read()呼び出しを強制終了する方法

サーバーから非常に大きなファイル(〜2GB)をダウンロードするプログラムの作成に取り組んでいます。部分的に終了したダウンロードを再開できるようにプログラムを作成しましたが、

悪いインターネット接続をシミュレートするために、ダウンロードの途中でイーサネットコードをルーターから引き出しています。残念ながら、これにより私のプログラムは次の呼び出しでハングします。 while((bytesRead = in.read(data)) > 0)

(ここで、bytesReadはint、inはHttpURLConnectionから構築されたBufferedInputStream、dataはバイト配列です)。

別のスレッドでin.close()を呼び出して呼び出しを「中断」しようとしましたが、インターネット接続が復元されるまで(例外がスローされるまで)効果がありません。

切断されたインターネット接続がプログラムをフリーズするのを防ぐ方法はありますか?