【发布时间】:2014-02-21 05:47:40
【问题描述】:
所以我有这种方法可以将文件中的数据读入一个字节数组,起点为“偏移”,长度为“len”:
public static byte[] readFileDataToByteArray( File inFile, long offset, int len ) {
byte[] buffer = new byte[ len ];
try {
RandomAccessFile in = new RandomAccessFile( inFile, "r" );
in.seek( off );
in.read( buffer );
in.close();
} catch ( IOException e ) {
System.err.println("Error readSentence: Error reading " + inFile );
System.exit(1);
}
return buffer;
}
现在只要len 变量不超过允许的最大 int 值,它就可以正常工作。但是当我必须使用“long”作为变量 len 的数据类型才能传递更大的数字(即创建更大的数组)时,我收到以下错误:
../util/Common.java:564: error: possible loss of precision
byte[] buffer = new byte[ len ];
^
required: int
found: long
1 error
所以基本上我需要做的就是创建一个大小为“long”数据类型的字节数组。有什么提示吗?
【问题讨论】:
-
嗯;您知道任何不适合
int的long意味着它的值是2^31 或更多,不是吗?你为什么不直接做new byte[(int) len]? -
我当然知道。事实上,我程序中的数字超过了 2^31-1,然后被转换为负数(在 int 范围的另一端)。转换为 int 并不能解决问题,因为转换后数字将再次为负数,或者充其量是 MAX_INT,这不是我想要的。我希望原始长数是字节数组的长度
-
好的,等一下;你是认真的吗?你真的打算创建这么大的数组吗?在我看来,应该有另一种解决方案。如果你说你想做什么呢?
-
谢谢大家。看来我得另谋出路了……
标签: java byte bytearray long-integer