2016-10-10 3 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. } 

Но я получаю NegativeArraySizeException в строке 2, где размер превышает Integer.MAX_VALUE. Я не уверен, как этого добиться.

bytesToSkip долго, как я вычислить в функции ниже:

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). Скажите нам, что вы _actually_ пытаетесь выполнить. –

+1

И в чем смысл 'bytesToSkip' быть' long' в первую очередь? так как вы не можете прочитать столько данных одновременно? И в чем смысл самого кода? Вы знаете о 'InputStream.skip()'? – EJP

+0

@EJP Мне нужно было прочитать стандартный формат байтов, поэтому я не использовал InputSream на первом месте. –

ответ

-1

Начиная с вашего публикуемую 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; 
} 

Когда bytes.length==8 и первый байт по абсолютному значению> = 128 (в Java specific: это отрицательное значение байта), вы закончите отрицательное значение для своего долгого.

Пример:

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

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

это приведет к -1 печати. Который преобразуется достаточно хорошо в int с значением -1, но все равно будет неподходящим для длины массива.

+0

«Если» так же силен. Нет никакой разницы. – EJP

+0

Для «некоторых других значений« если », например, что? Какой мнимый язык вы здесь постулируете? Это формальная логика 101. – EJP

Смежные вопросы