Java 正在初始化大小为“0”的字节数组;“长”;数据类型?

Java 正在初始化大小为“0”的字节数组;“长”;数据类型?,java,byte,bytearray,long-integer,Java,Byte,Bytearray,Long Integer,因此,我使用这种方法将文件中的数据读入一个字节数组,起始点为“offset”,长度为o“len”: 现在只要len变量不超过允许的最大int值,就可以正常工作。但是,当我必须使用“long”作为变量len的数据类型以能够传递更大的数字(即创建更大的数组)时,我会得到以下错误: ../util/Common.java:564: error: possible loss of precision byte[] buffer = new byte[ len ];

因此,我使用这种方法将文件中的数据读入一个字节数组,起始点为“offset”,长度为o“len”:

现在只要
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”数据类型。有什么提示吗?

您可以查看此链接

请注意,在播放原语之前,一定要查看原语的范围。
在这里,您需要一个字节数组大小来获取long值,这在我看来是一个无效的场景,因为long可以在其范围内具有精度。地板/天花板的精度值肯定会导致精度损失

我刚试过。最大数组大小不能超过堆大小。因此,如果可能的话,最好在几次内处理该文件

public class RandomAccessFileTest {
    static public class LargeArray {
        public long offset;
        public long len;
        public int arraySize; // can't exceed JVM heap size
        byte[] byte_arr;

        public LargeArray(long offset, long len, int arraySize) {
            this.offset = offset;
            this.len    = len;
            this.arraySize = arraySize;
        }
    }

    public static LargeArray readFileDataToByteArray(File inFile, LargeArray  array) {
        long count = array.len/array.arraySize;
        if (array.len > 0 ) {
            try{
                int arr_len = (count == 0) ? (int)array.len:array.arraySize;
                array.byte_arr = new byte[arr_len];
                RandomAccessFile in = new RandomAccessFile( inFile, "r" );
                in.seek( array.offset );
                in.read( array.byte_arr );          
                in.close();

                array.offset += arr_len;
                array.len    -= arr_len;
                return array;
            } catch ( IOException e ) {
                System.err.println("Error readSentence: Error reading " + inFile ); 
                System.exit(1);
            }       
        }
        return null;
    }

    public static void main(String[] args) {

        LargeArray array = new LargeArray(5,1000000, 10000);
        File file = new File("test.txt");

        while((array = readFileDataToByteArray(file, array)) != null) {
            System.out.println(new String(array.byte_arr));
        }   
    }
}

嗯,;您知道任何不适合
int
long
表示其值为2^31或更大,是吗?你为什么不直接做新字节[(int)len]?我当然知道。事实上,我的程序中的数字超过了2^31-1,然后被转换为负数(在int范围的另一端)。转换为int并不能解决问题,因为转换后数字将再次为负数,或者最多是MAX_int,这不是我想要的。我希望原来的long数是字节arrayOK的长度,等等;你是认真的吗?您真的打算创建这么大的阵列吗?在我看来,应该有另一种解决办法。如果你说了你想做什么呢?可能是重复的谢谢伙计们。似乎我必须找到另一种方法…这不是OP所要求的。他们在问如何做
新字节[someLong]
public class RandomAccessFileTest {
    static public class LargeArray {
        public long offset;
        public long len;
        public int arraySize; // can't exceed JVM heap size
        byte[] byte_arr;

        public LargeArray(long offset, long len, int arraySize) {
            this.offset = offset;
            this.len    = len;
            this.arraySize = arraySize;
        }
    }

    public static LargeArray readFileDataToByteArray(File inFile, LargeArray  array) {
        long count = array.len/array.arraySize;
        if (array.len > 0 ) {
            try{
                int arr_len = (count == 0) ? (int)array.len:array.arraySize;
                array.byte_arr = new byte[arr_len];
                RandomAccessFile in = new RandomAccessFile( inFile, "r" );
                in.seek( array.offset );
                in.read( array.byte_arr );          
                in.close();

                array.offset += arr_len;
                array.len    -= arr_len;
                return array;
            } catch ( IOException e ) {
                System.err.println("Error readSentence: Error reading " + inFile ); 
                System.exit(1);
            }       
        }
        return null;
    }

    public static void main(String[] args) {

        LargeArray array = new LargeArray(5,1000000, 10000);
        File file = new File("test.txt");

        while((array = readFileDataToByteArray(file, array)) != null) {
            System.out.println(new String(array.byte_arr));
        }   
    }
}