問題タブ [bytebuffer]
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 - ByteBuffer.allocateDirect() と MappedByteBuffer.load() の違い
を使用して特定のファイルをメモリマッピングすることにより、2 つ以上の JVM 間で一種の共有キャッシュを実装しようとしていましたMappedByteBuffer
。MappedByteBuffer.load()
仕様から、使用時にデータを直接バッファにロードする必要があることがわかります。これについていくつか質問があります。
私のコードスニペット::
上記のコードの出力は、直接メモリ使用量が 0 バイトです (File.txt は 1 GB)。しかし、行のコメントを外すと..
Direct Memory Usage は 100MB です。そもそもなぜ直接メモリを使用していないのか(つまり、行がコメントアウトされているとき)、なぜそうなのか理解できません
上記のコードの直接メモリ使用量は 0 B ですが、プロセスの常駐メモリ ( unix top を使用) が 1 GB 増加していることがわかります。しかし、ボックスで「free -m」を実行しても、メモリ使用量の増加は見られません。
どちらの場合も、メモリがどこに行き着くのかについて少し混乱しています。
ありがとう!
java - Java:文字列をByteBufferとの間で変換することおよび関連する問題
ソケット接続にJavaNIOを使用しており、プロトコルはテキストベースであるため、SocketChannelに書き込む前に文字列をByteBufferに変換し、着信ByteBufferを文字列に戻す必要があります。現在、私はこのコードを使用しています:
これはほとんどの場合機能しますが、これがこの変換の各方向を実行するための好ましい(または最も簡単な)方法であるかどうか、または別の方法で試すことができるかどうか疑問に思います。変換が行われるたびに新しいByteBufferオブジェクトを使用している場合でも、ときどき、一見ランダムに、例外などを呼び出してencode()
スローdecode()
し
ます。java.lang.IllegalStateException: Current state = FLUSHED, new state = CODING_END
これらのメソッドを同期する必要がありますか?文字列とByteBufferの間で変換するためのより良い方法はありますか?ありがとう!
c# - C# の Java の「ByteBuffer.putType()」に相当
Java からコードを移植して、C# でバイト配列をフォーマットしようとしています。Java では、「buf.putInt(value);」、buf.putShort、buf.putDouble などのメソッドが使用されます。ただし、これを C# に移植する方法がわかりません。MemoryStream クラスを試してみましたが、特定の型をバイト配列の最後に置く方法がありません。
質問: C# での Java の「ByteBuffer.putType(value)」に相当するものは何ですか? ありがとう!
c# - .NET の「ByteBuffer.flip」と「ByteBuffer.slice」に相当するものは何ですか?
コードを Java から C# に移植する必要があります。Javaコードでは「ByteBuffer.flip()」と「ByteBuffer.slice」というメソッドが使われているのですが、これをどう訳せばいいのかわかりません。
私はこの質問を読みました( c# の javax.nio.Buffer.flip() に相当します)が、答えは示されていますが、それを適用する方法がわかりません。Tom Hawtin によると、基になる配列で「制限を現在の位置に設定してから、位置をゼロに設定する」必要があります。これらの値を変更する方法がわかりません。(根底にあるロジックを説明できれば、とても助かります:)
ByteBuffer.slice については、翻訳方法がわかりません。
編集:実際のコードでより明確にできる場合は、投稿します:
ジャワ:
これまでのところ、C#.NET での私の翻訳:
ありがとうございました!
編集: Java ドキュメントに基づいて に変更b.BaseStream.SetLength(b.BaseStream.Length);
されました。b.BaseStream.SetLength(b.BaseStream.Position);
java - How to initialize a ByteBuffer if you don't know how many bytes to allocate beforehand?
Is this:
...the only way to initialize a ByteBuffer
?
What if I have no idea how many bytes I need to allocate..?
Edit: More details:
I'm converting one image file format to a TIFF file. The problem is the starting file format can be any size, but I need to write the data in the TIFF to little endian. So I'm reading the stuff I'm eventually going to print to the TIFF file into the ByteBuffer first so I can put everything in Little Endian, then I'm going to write it to the outfile. I guess since I know how long IFDs are, headers are, and I can probably figure out how many bytes in each image plane, I can just use multiple ByteBuffers during this whole process.
java - JavaByteBufferと同等のC++?
JavaByteBufferと「同等」のC++を探しています。
私はおそらく明白なものを見逃しているか、明確にするために分離された使用例が必要です。私はiostreamファミリーを調べましたが、それが基礎を提供しているようです。具体的には、次のことができるようにしたいと思います。
- バイト配列/ポイントからバッファを構築し、バッファからプリミティブを取得します(例:getByte、getInt)
- putByte、putIntなどのプリミティブを使用してバッファを構築してから、バイト配列/ポインタを取得します。
java - Java - ByteBuffer.remaining() の問題
概要: データをポンピングする ByteBuffer があります。その後、このデータをソケット経由で送信したいと思います。
そこで、次のようなコードを書きました。
呼び出しコードでは、次のことを行います。最初にシリアル化された ByteBuffer を取得し、それをソケットに書き込みます...
buffer.remaining() は、バッファに送り込んだ #bytes と正確に等しくなければならないことを期待しています。ただし、そうではないことがわかりました。常に、バッファーの基になる配列のサイズである 1024 に等しくなります。
これがバッファの作成方法です...
これは、printステートメントの出力として得られるものです...
文字列 [John] #bytes = 4 文字列 [Smith] #bytes = 5
#出力バッファ内のバイト: 1024 制限 = 1024 pos = 0 残り = 1024
バッファに入れられた正確な #bytes を取得するにはどうすればよいですか?
ありがとう!
java - JNA ByteBuffer statvfs
Javaからのstatvfs呼び出しを使用して、/フォルダーの空き領域を取得しようとしています。
44バイトを示すcからstatvfs構造体のサイズを確認し、java.nio.ByteBuffer.allocateDirect 44バイトを使用してバイトバッファーを割り当て、その順序は44バイトに設定されています。statvfsを呼び出すと、戻り値0が返されるので、呼び出しは成功したと思いますが、buffer.getIntを使用してByteBufferから情報を取得できないようです。これは正しい512 f_bsizeを返しますが、その後は読み取ることができません。 。
buffer.getInt(12)は私にf_blocksを与えるはずですが、私は0を取得します。
または、ロジックに障害がありますか?
java - 成長中の ByteBuffer
putX() 呼び出しが容量をオーバーランした場合に動的に拡張される java.nio.ByteBuffer の実装を見たことがありますか?
このようにしたい理由は 2 つあります。
- 事前にどのくらいのスペースが必要かわかりません。
- スペースがなくなるたびに new ByteBuffer.allocate() を実行してから一括 put() を実行したくありません。
java - ByteBuffer、反転する必要があるかどうかを検出するためのクリーンな方法は何ですか
ByteBufferを反転する必要があるかどうかを検出するためのクリーンで確実な方法はありますか?
データ構造のパックとアンパック、およびパック/アンパックされるバイトのストレージに使用されるByteBufferがあります。
ただし、書き込み操作が実行されたばかりか、読み取り操作が実行された場合、またはByteBufferがコードに渡された場合、手動で位置と制限を操作せずに、バッファーが書き込みモードまたは読み取りモードであることを保証できません。
部分的な読み取りと書き込みも存在し、この問題に追加されます。私は、バッファが書き込みモードのままで、複製が作成され、読み取り目的で反転されるという規則を採用しています。バッファが私のコードに渡されると、手動で検査され、書き込みモードの場合と同じように位置と制限が設定されます。確かにもっと良い方法があります。