![](/img/trans.png)
[英]Can an ArrayList contain more elements than the maximum value of int?
[英]Java native big jshortarray with more than int elements
如何創建一個包含 545460846912 個元素的 jshortarray
retval = env->NewShortArray((long) 545460846912); // allocate
~~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~~~~
..test.cpp:296:42: warning: implicit conversion from 'long' to 'jsize' (aka 'int') changes value from 545460846912 to 320 [-Wconstant-conversion]
env->SetShortArrayRegion(retval, 0 , (long) 545460846912, (short const *)b);
~~~~~~~~~~~~~~~~~~~ ^~
嘗試模仿這段代碼
int nGetEncoderFrameSize = (int) LibSpeex.nGetEncoderFrameSize(nInitSpxEncoder);
它為我的文件返回 545460846912
我需要制作一個具有該大小的短數組
short[] sArr = new short[nGetEncoderFrameSize];
然后調用它:
long nEncodeBuffer = LibSpeex.nEncodeBuffer(nInitSpxEncoder, sArr, bArr, 65536);
是否可以創建這么大的 jshortArray?
我該如何解決?
如何創建一個包含 545460846912 個元素的 jshortarray
你不能。
根據Java 9 語言規范(粗體):
Arrays 必須由
int
值索引;short
、byte
或char
值也可以用作索引值,因為它們經過一元數字提升(§5.6.1)並成為int
值。嘗試訪問具有
long
索引值的數組組件會導致編譯時錯誤。在運行時檢查所有數組訪問; 嘗試使用小於零或大於或等於數組長度的索引會導致拋出 ArrayIndexOutOfBoundsException。
Java int
值的范圍限於(再次,加粗我的):
4.2.1. 積分類型和值
整數類型的值是以下范圍內的整數:
- 對於
byte
,從 -128 到 127,包括short
,從 -32768 到 32767,包括- 對於
int
,從 -2147483648 到 2147483647,包括- 對於
long
,從 -9223372036854775808 到 9223372036854775807,包括- 對於
char
,從 ' ' 到 '�' 包括在內,即從 0 到 65535
2147483647 小於 545460846912。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.