2016-10-10 5 views
-1

私は同様の記事を見てきましたが、誰も本当に私の質問に答えませんでした。したがって、私は別のスレッドで自分の質問を投稿します。私はバイトarray.Iに読んでいたファイル内のいくつかのバイトをスキップする必要が はファイル内のバイトを読み取る:java.lang.NegativeArraySizeException

1. byte [] readBytesToSKip = null; 
2. readBytesToSKip = new byte[(int)bytesToSkip]; 
3. bytesReadToSkip = System.in.read(readBytesToSKip) ; 
4. if(bytesReadToSkip > 0) 
5. { 
6.  baos_.write(readBytesToSKip, 0, bytesReadToSkip); 
7. } 

以下のコードを介してこれを実現しようとしています。しかし、私はサイズがInteger.MAX_VALUEを超えて2行目でNegativeArraySizeExceptionを取得します。私はそうでなければこれを達成する方法がわかりません。私は以下の関数で計算するよう

bytesToSkipは長いです:あなたの投稿bytes->long機能からスタート

public static long bytesToLong1(byte[] bytes) { 
     long value = 0; 
     for (int i = 0; i < bytes.length; i++) 
     { 
      value = (value << 8) + (bytes[i] & 0xff); 
     } 
     return value; 
    } 
+2

'bytesToSkip'の値は何ですか?それが 'long'で、' Integer.MAX_VALUE'より大きい場合は、一度にスキップすることはできません。それを複数のステップで行う必要があります。書かれているように、この問題は[XY問題](http://xyproblem.info)のように聞こえます。実際にあなたが達成しようとしていることを教えてください。 –

+1

そして、最初に 'bytesToSkip'が' long'である点は何ですか?一度に多くのデータを読み取ることはできませんので、コード自体のポイントは何ですか?あなたは 'InputStream.skip()'を知っていますか? – EJP

+0

@EJPバイトを標準入力として読み込む必要があった理由は、InputSreamを最初に使用しなかった理由です。 –

答えて

-1

たびbytes.length==8

public static long bytesToLong1(byte[] bytes) { 
    long value = 0; 
    for (int i = 0; i < bytes.length; i++) 
    { 
     value = (value << 8) + (bytes[i] & 0xff); 
    } 
    return value; 
} 
と最初のバイトは、Javaで(絶対値> = 128です特定:それは負のバイト値です)、あなたは長いあなたの負の値を持つ終了します。

例:

byte vals[]={0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; 

System.out.println(bytesToLong1(vals)); 
-1

が印刷されることをもたらすであろう。これは、-1値を持つintにかなり細かく変換されますが、配列の長さには依然として不適切です。

+0

'If'と同じように強いです。違いはありません。 – EJP

+0

「何か他の値」については「もし何か?ここで想像している言葉は何ですか?これは形式論理101である。 – EJP

関連する問題