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

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

java - java nio と ByteBuffer の問題

問題が発生しました。メッセージの受信にはnioソケットを使用しています。完全なメッセージが受信されると、受信したメッセージを保持する dataBuffer を別のユーザーに送信します。ただし、以下は例外です。問題はどこだ?dataBuffer.duplicate() を呼び出して書き出そうとします。ただし、受信側では、読み取り操作でそのような例外がスローされます。新しい ByteBuffer を割り当て、メッセージの新しいコピーを作成して書き出す必要があります。この場合、エラーはありません。しかし、コピーステップは必要ありません。それを解決する他の方法はありますか?

例外がスローされました

コード

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

java - 複数の受信者に異なるヘッダーを持つ大きなメッセージを書き込む効率の問題

Java nio ソケットを使用して 3 人のユーザーに送信される文字列 (メッセージ本文) と 3 つの異なるヘッダーがあります。

1 つの方法は、大きなバイト バッファーを作成し、メッセージ本文をある位置に置き、ヘッダーをメッセージ本文の前に置くことです。

このように、メッセージ本文のコピーを 1 つ作成し、ヘッダーを書き換える必要があります。私のプロジェクトでは、メッセージ本文は約 14 K バイトです。メモリ ページが 2K バイトの場合、メモリ効率の管理には効率的ではありません。

私の質問: 大きなメッセージ文字列をバイト バッファにコピーしないようにする方法はありますか? Cはポインターを使用してサポートできると思います。本当ですか?

ありがとう。

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

java - Java XML 解析

以下のような複数の XML ドキュメントを順番に含むファイルがあります。

それが何度か繰り返されます。

私はJavaを使用し、ファイル用にFileChannelを開き、読み取るバイトバッファを持っています。Java で XML バイトの部分解析を行う組み込みの方法、より簡単な方法、または既に解決済みの方法がある場合は、感謝します。たとえば、次のようにします。

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

java - java.nio.channels.FileChannelを使用してByteBufferに読み取る方法は、BufferedReader#readLine()のような同様の動作を実現します。

ファイルからの読み取りに使用java.nio.channels.FileChannelしたいのですが、同じように1行ごとに読み取りたいですBufferedReader#readLine()java.nio.channels.FileChannel代わりに使用する必要があるのjava.ioは、ファイルにロックをかけ、そのロックファイルから1行ずつ読み取る必要があるためです。だから私は強制的に使用しますjava.nio.channels.FileChannel。助けてください

編集これは、FileInputStreamを使用してFileChannelを取得しようとしている私のコードです

コードがここにあるときlock = channel.lock();、それはすぐにに行き、finallyまだlockあるnullので、をlock.release()生成しNullPointerExceptionます。理由はわかりません。

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

java - Android非同期USBはByteBufferに読み取りますが、サイズを判断できません

最近追加された Android 用の USB API を使用して、Android 3.1 OS (Motorola Xoom) 上の FTDI ベースの USB デバイスからバイトを読み取っています: http://developer.android.com/guide/topics/usb/host。 html

ただし、非同期読み取りを行うときに問題が発生しています。

この関数は、デバイスからバイトを適切に読み取ります。ただし、どれだけ読んだかはわかりません。bb.position() は常に 0 を返し、bb.remaining() は常に 128 を返します。読み取りが 128 バイトを返すことを保証することはできません (デバイスのステータスを要求するなどの読み取りで、約 12 バイトしか返されない可能性があります)。読み取りが終了し、ByteBuffer 内のガベージが開始する場所を特定する方法はありません。ByteBuffer を巻き戻そうとしましたが、読み取りによってマークが設定されません。読み取られたバイト数を正確に判断する方法はありますか?

ありがとう

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

java - バイト配列を整数に変換する符号付きおよび符号なしの型に関する Java ByteBuffer の問題

私はこれを期待していました:

ただし、次のことが当てはまります。

署名付き/署名なしの型に関する Java の多くの制限のもう 1 つを回避するにはどうすればよいですか?

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

java - ネイティブで直接 ByteBuffer を読み書きする方法は?

ネイティブ部分でソケットからデータを受信し、Java コードでデータを読み取りたいと考えています。直接の ByteBuffer が適切な選択である可能性があることはわかっています。だから私はJavaでByteBufferを次のように準備します

そして、次のコードでこの ByteBuffer をネイティブで取得します

さて、私の愚かな問題は

(1) "socketfd = fd" という文だけで int 型の変数 socketfd を取得できるということでよろしいですか??? (fd は jint タイプであり、実際には Linux のソケット fd です) (2) C でこの ByteBuffer にデータを書き込むにはどうすればよいでしょうか ???

確かに... 私の状況では、別のネイティブ C++ 関数で Linux ソケット fd を取得していますが、必要な関数を追加できませんでした。この fd を使用してデータの読み取り/書き込みを行いたいのですが、Java コードでは不可能であることはわかっています。そこで、それをネイティブに渡し、直接 ByteBuffer を使用して一時データを保存することにしました。

なにか提案を ?

ありがとうございました。

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

java - snmp トラップ メッセージの結果である ByteBuffer をデコードします。

これを使用して、snmpv1 トラップ メッセージを受信して​​います。

byteBuffer私の問題は、エージェントが送信したデータを明確な方法で取得するために解析する方法がわからないことです。ここでコードを実行すると、次のようになります。

私は他のいくつかの s を試しましたMutableTypeが、どれを使うべきか本当に混乱しています。これは正しいです?もしそうなら、どれを使うべきか知っていますMutableTypeか?

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

java - InputStream の読み取りのパフォーマンスを向上させるにはどうすればよいですか?

これはキスの瞬間かもしれませんが、とにかく尋ねるべきだと思います。

スレッドがあり、ソケットの InputStream から読み取っています。特に小さいデータ サイズを扱っているため (受信できるデータが 100 ~ 200 バイトのオーダーであるため)、バッファー配列のサイズを 256 に設定しました。読み取り関数の一部として、 InputStream から読み取ったときに、すべてのデータを取得したことを確認します。そうでない場合は、読み取り関数を再帰的に呼び出します。再帰呼び出しごとに、2 つのバッファー配列をマージして元に戻します。

私の問題は、256 を超えるバッファーを使用することは決して予想していませんが、安全を確保したいということです。しかし、ヒツジが飛び始め、バッファーが読み取りよりも大幅に多い場合、関数は (推定により) 完了するまでに指数関数的な曲線を取り始めます。

読み取り機能やバッファ マージの効率を上げるにはどうすればよいですか?

これがそのままの read 関数です。

編集:私は(不当に)妄想的であり、バッファを2048に設定して完了と呼ぶべきですか?

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

java - ByteBuffer から連続するスライスを取得するにはどうすればよいですか?

大きなファイル (100 MB) を含むByteBufferがあります。

一度に合法的に書き込むことができるのは 1 MB だけwriteChannelです。

ByteBuffer の内容をスライスして、一度に 1 MB のスライスだけを に書き込むにはどうすればよいwriteChannelですか?