問題タブ [bytearrayoutputstream]
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:ByteArrayOutputStreamに書き込むときのIOException?
ByteArrayOutputStream
単にメモリに書き込むだけなので、IOException
発生することはありません。ただし、OutputStream
インターフェイスの契約により、すべてのストリーム操作IOException
はそのthrows
句で定義されます。
この発生しないことを「処理」する正しい方法は何IOException
ですか?単に操作を空のtry-catch
ブロックにラップしますか?
またはByteArrayOutputStream
、例外をスローする可能性のある実際の状況はありますか?
(参照:安全で読みやすい方法で、スローされないことがわかっているIOExceptionを処理するにはどうすればよいですか?)
編集
Jonが指摘しているように、定義するメソッドの句をByteArrayOutputStream
宣言していませんが、それはから継承し、スローします(スーパークラスのバージョンを置き換える可能性があるため、このメソッドをオーバーライドしないのはかなり奇妙です)。一度に1バイトを書き込みます-はるかに効率的な呼び出しで)throws
write
write(byte[])
OutputStream
IOEXception
BAOS
arraycopy
java - BufferedOutputStream と ByteArrayOutputStream
ByteArrayOutputStream を単独で使用するのではなく、BufferedOutputStream を ByteArrayOutputStream にラップする利点はありますか?
java - JavaはGZIPOutputStreamとByteArrayOutputStreamを一緒にラップします - 私は何が間違っていますか?
Main.java
CompressedOutputStream.java
したがって、GZIPOutputStream と ByteArrayOutputStream を結合しようとするこのコードがあります。
何らかの理由で、私が得ているのは同じ10バイトだけです。
この出力の取得:
圧縮されたデータの長さ (これまで) は 10 バイトです
圧縮されたデータの合計の長さは 10 バイト
です データの CRC32 は 4550d94d です
write() を呼び出すと、最終的に抽象関数になるようです。つまり、どこにも到達せず、何も書き込まれません。
オンザフライで書き込み、圧縮し、後で圧縮されたバイトを取得できるようにしたい。
ここで何が欠けていますか?些細なことのようですが、そうではありません。
編集#1:私の最終目標
明確にするために:最後に必要なのは、シーケンスではなくチャンクで書き込むメモリ内バッファだけであり、Xバイトに達した時点でこれらの圧縮およびチェックサムされたバイトを取得できます(標準のJavaストリームではなく、どこかに書き込むため)。
java - Java:メモリ効率の高いByteArrayOutputStream
ディスクに40MBのファイルがあり、バイト配列を使用してメモリに「マップ」する必要があります。
最初は、ファイルをByteArrayOutputStreamに書き込むのが最善の方法だと思いましたが、コピー操作中のある時点で約160MBのヒープスペースが必要であることがわかりました。
RAMの3倍のファイルサイズを使用せずにこれを行うためのより良い方法を誰かが知っていますか?
更新:ご回答ありがとうございます。ByteArrayOutputStreamの初期サイズを元のファイルサイズより少し大きくするように指示すると、メモリ消費量を少し減らすことができることに気付きました(コードで正確なサイズを使用すると、再割り当てが強制され、理由を確認する必要があります)。
もう1つの高いメモリスポットがあります。ByteArrayOutputStream.toByteArrayでbyte[]を取り戻すときです。ソースコードを見ると、配列のクローンを作成していることがわかります。
ByteArrayOutputStreamを拡張してこのメソッドを書き直し、元の配列を直接返すことができると思います。ストリームとバイト配列が複数回使用されないことを考えると、ここに潜在的な危険はありますか?
android - AndroidでByteArrayOutputStreamの書き込み中にメモリ不足エラーが発生しました
私は大きな問題を抱えています。Sdcardにあるビデオファイルから2^21バイトを読み取っていますが、同じものをByteArrayOutputStreamに書き込むと、メモリ不足として例外がスローされます。どうしてか分かりません?同じための正しい解決策を提案してください。
これがスタックトレースです。
エラースタック:
コード:
php - PostgreSQL byteaから、Imagickを使用して画像ファイルを読み取り(および書き戻し)しようとしています。
PostgreSQLから、画像ファイルをImagickオブジェクトに読み込もうとしています。そして、同じファイルを別のbyteaフィールドに書き直そうとしています。目的は、PHPとImagickで使用される文字列の処理と変換を完全に理解することです。
これはPostgreSQL9にあるため、ネイティブのbytea_outputは16進数です。私は、PHPで処理するためにbytea_outputをエスケープするように変更するためのメモに従っています。
最終的に、目的はこのファイルをImageMagickでサポートされている形式のいずれかに変換することです。
物事は十分に始まります!エスケープを解除すると、$imagestringはディスク上のファイルの長さになります。ここまでは順調ですね。その後まもなく物事は制御不能になります...
同じ長さのファイルをDBに再構成する、書き戻す文字列が見つかりません。
ここで何が問題に見えますか?
android - Android Bluetooth ゲーム、バイト ストリームで int[] を転送する必要がある
状況は次のとおりです。私はアンドロイド用のポンのマルチプレイヤーバージョンを作成しています。パドルがボールに接続したら、他のプレーヤーにボールの着弾点 (x、y 座標) を送信して、他のプレーヤーの画面を更新して、ボールがどこから来ているかを示すようにしたいと考えています。私のパドルの位置。もう一方のデバイスがボールの軌道を計算し、最終的にこのプロセスを繰り返します。本質的に私が欲しいのは、このようなものです--
ここでの問題bluetoothConnection.write()
は、java.io.OutputStream に依存しているため、byte[] の書き込みのみをサポートすることです。
それで、私の int[] を byte[] に変換する方法はありますか(そして後でまた元に戻します)?それが役立つ場合、私の int[] には常に正確に 5 つの int が含まれ、すべて常に正になります。デバイスの画面サイズに依存するため、int の最大値が何であるかはわかりません。
java - Java でのオーディオ入力キャプチャ - バイト配列
オーディオ入力の double/intger 振幅値を取得しようとしています:
バイト配列に値 0、-1、または 1 しか含まれていない理由がわかりません。振幅の倍精度または整数値を取得する方法。
pdf - PDF から bytearrayoutpustream 空白
PDF一時ファイルを作成してBLOBフィールドDBに保存するJavaコードがあります。PDF が正しく生成され、BLOB が DB に保存されます。PDFを再作成すると、これは空白文字なしで返されます! おそらく問題は、bytearrayoutputstream のコード化 Base64 です。これは私のコードです
java - byte []配列の長さを超えています(intの上限を超えています)-java.lang.ArrayIndexOutOfBoundsException
ByteArrayOutputStreamオブジェクトがあり、次のエラーが発生します。
250mbのbyte[]チャンクを一度に1つずつ書き込むことにより、複数のギグのファイルをロードしようとしています。
バイトのサイズが大きくなるのを見ることができ、intの上限である長さ2147483647に達するとすぐに、次の行で爆発します。
streamはByteArrayOutputStreamであり、bufは250mbチャンクでストリームに書き込んでいるものです。
やろうと思っていた
最後に。intの上限より大きいバイト配列サイズをサポートする他の方法を試すことができますか?