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

读取文件中的字节:java.lang.NegativeArraySizeException,java,exception,io,byte,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. {

我看过类似的帖子,但没有一篇真正回答了我的问题。因此,我把我的问题放在一个单独的帖子里。 我需要跳过我正在字节数组中读取的文件中的一些字节

 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\u值。我不知道如何才能做到这一点,否则

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;
    }
公共静态长字节testolong1(字节[]字节){
长值=0;
for(int i=0;ivalue=(value从发布的
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;
}

将导致打印
-1
。这将很好地转换为带有
-1
值的
int
,但对于数组的长度来说仍然是不合适的。

bytesToSkip
的值是什么?如果它是
长的
且大于
整数。MAX_值
您将无法跳过它一次完成。你必须分多个步骤来完成。正如所写的,这个问题闻起来像是一个问题。告诉我们你实际上想要完成什么。那么
bytesToSkip
作为一个
long
首先有什么意义?因为你不能一次读取那么多数据?代码本身又有什么意义?你知道吗putStream.skip()
?@EJP我需要从标准输入读取字节,这就是为什么我没有首先使用InputSream。您使用的是
InputStream
。是
InputStream
。叹气。您使用的是
bytesRead=System.in.read(字节)
InputStream
。你在读这里写的东西吗?我的评论是,你应该调用
skip()
,而不是所有这些代码。“If”同样强大。没有区别。对于“If”的一些其他值,比如什么?你在这里假设的是什么想象语言?这是形式逻辑101。
byte vals[]={0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};

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