读取文件中的字节: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;i value=(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));