2012-03-07 10 views
0

入力スチームのバッファが1000バイトを読み取るたびに、いくつかの開始記号とビデオ名は、実際のビデオコンテンツの前にバッファの先頭にあります(100バイトなど)。結果バッファに書き込むことはしません。したがって、初めてバッファに101-999を書き込んでください。 2回目は1000-1999を書きたいと思っています。現在、0-999を書き換え、結果ビデオの実際のビデオコンテンツの前に900の余分なバイトがあります。Javaでバイトバッファの半分に書き込む方法はありますか?

バッファーに最初のバッファー長をスキップする方法はありますか?ありがとう!

+3

あなたが先に行くと[sscce](HTTP追加し、実際にいくつかの(質問に関連、短い)コード – SJuan76

+1

を投稿する必要があります/を/sscce.org/)。 – paislee

+0

[Javaサーブレットのいくつかのオフセットからバイトバッファを書き込む方法]の複製が可能です(http://stackoverflow.com/questions/9588359/how-to-write-byte-buffer-from-some-offset-in-java-サーブレット) – EJP

答えて

3

ソフィアでは、人々が助けることができるように実際にサンプルコードを含める必要がありますが、あなたのタグからNIOのByteBufferについて質問する可能性があります。

ByteBuffer.position(int)メソッドでは不要なコンテンツをスキップします.ByteBuffer implには魔法はありません。バッキングデータストア(byte []またはダイレクトメモリ参照)です。 OSへのポインタ)とバッファ内の概念位置(開始、終了、制限など)を参照する一連のintポインタを使用します。必要のないバイトを "スキップ"したいだけです。それを越えて位置を移動することによって行われるので、バッファ全体を書き出す次の操作は位置から開始して制限に進む。

私はのByteBufferからバイトをスキップするためにこのコードを使用
+0

ありがとうリヤド!あなたは正しいです、私はすでに解決しているいくつかの論理的な問題だけバッファ操作とトリッキーな部分はありません。あなたのアドバイスをもう一度おねがいします – sophia

5

import java.nio.ByteBuffer; 

public class Utility { 
    public static void skip(ByteBuffer bb, int skip) { 
    bb.position(bb.position() + skip); 
    } 
}