读取文件中的字节:java.lang.NegativeArraySizeException

时间:2016-10-10 00:54:10

标签: java exception io byte

我已经完成了类似的帖子,但他们都没有真正回答我的问题。因此,我在一个单独的帖子中发布我的问题。 我需要跳过我在字节数组中读取的文件中的一些字节。我正在尝试通过下面的代码实现此目的

 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. }

但我在第2行得到NegativeArraySizeException,其中大小超过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;
    }

1 个答案:

答案 0 :(得分:-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和第一个字节的绝对值为&gt; = 128时(特定于Java:它是负字节值),您将以负值结束为你的长期。

示例:

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

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

将导致-1被打印。哪个会很好地转换为int -1值,但对于数组的长度仍然不合适。