我在Java中有一个Integers数组,我只想使用它的一部分.我知道在Python中你可以做类似这个数组[index:]的东西,它从索引中返回数组.这样的事情在Java中是可能的.
我想更改字节数组中的值以将长时间戳值放入MSB中.谁能告诉我最好的方法呢?我不想逐位插入值,我认为这是非常低效的.
long time = System.currentTimeMillis();
Long timeStamp = new Long(time);
byte[] bArray = new byte[128];
Run Code Online (Sandbox Code Playgroud)
我想要的是:
byte[0-63] = timeStamp.byteValue();
Run Code Online (Sandbox Code Playgroud)
这样的事情是可能的.在此字节数组中编辑/插入值的最佳方法是什么.因为byte是一个原始的我不认为有一些我可以使用的直接实现?
编辑:
似乎System.currentTimeMillis()比它更快Calendar.getTimeInMillis(),所以用它替换上面的代码.如果错误,请纠正我.
我有一些类库,使用我的数据,它被读入缓冲区.有可能以某种方式避免一次又一次地复制数组,将部分数据更深入地传递到处理方法中吗?好吧,这听起来很奇怪,但在我的特殊情况下,有一个特殊的编写器,它将数据分成块并将它们分别写入不同的位置,因此它只执行System.arraycopy,获得它需要的东西并调用底层编写器,用新的子阵列.这种情况多次发生.重构此类代码的最佳方法是什么?
学习Java,请温柔.理想情况下,我需要创建一个字节数组,指向更大数组的一部分:
byte[] big = new byte[1000];
// C-style code starts
load(file,big);
byte[100] sub = big + 200;
// C-style code ends
Run Code Online (Sandbox Code Playgroud)
我知道这在Java中是不可能的,并且有两种解决方法可以想到并包括:
要么通过大的复制部分大到子迭代.
或者编写自己的类,它将引用big + offset + size并通过使用big作为实际底层数据结构的访问器方法实现"子阵列" .
我试图解决的任务是将文件加载到内存中,然后获取对通过类存储文件的记录的只读访问权限.速度是最重要的,因此理想情况下我想避免复制或访问方法.因为我正在学习Java,所以我想坚持下去.
我还有其他选择吗?如果我没有充分解释这项任务,请提出问题.
我试图找到一种在不创建新副本的情况下切片超大型阵列的解决方案/解决方法。这是我的问题。
假设我有大量的double / int,大小都在1亿或更多。我将代表不同事物的许多不同数组存储在一个非常大的数组中,以大大节省内存使用量。因此,我没有一个大小为100的一百万个数组,而是一个大小为一亿的单个数组。我存储索引(开始和停止)以跟踪我的数据。
我想获得数千个大小为100的切片。如果我使用Arrays.copyOfRange()方法获取切片,则由于将每个切片都是消耗内存的新副本,因此无法实现将所有内容放入单个大数组的目的。
我有一些遗留代码(多年来,许多人写了超过一百万行),它们可以处理自己的数据(较小的数组)。不可能修改现有代码以在大型数组中使用索引(开头,结尾)。
如果我能以某种方式返回原始数组,使得返回的数组是一个引用(或假装为),其中索引0是原始大型数组中的某个任意索引,那将很棒。
在C / C ++中,我可以轻松地返回具有特定偏移量和长度的指针,调用代码可以使用该偏移量和长度。
我在Java中有哪些选择?
编辑:我看了以下类似的问题,但它不包含对我的问题的答复。 如何在Java中获取数组的子数组而不复制数据?
在java中,我想知道如何在不复制的情况下从特定位置获取byte[]其他byte[]信息?
例:
byte[] bytes1 = new byte[100];
for (int i = 0; i < 100; i++) {
bytes1[i] = (byte)(i+1);
}
byte[] byte2;
Run Code Online (Sandbox Code Playgroud)
我怎么可以指向byte2到byte110位?我希望byte2有:[0] = 10, [1] = 11, [2] = 12
可能吗 ?
我尝试使用ByteBuffer但没有任何成功.
我需要比较两个byte []数组的元素,但只能达到固定长度.对于我使用的整个阵列java.util.Arrays.equals().当然我可以复制子范围(Arrays.copyOf()),但我不想这样做.我也确信在没有新的实用程序方法实现的情况下应该有标准的方法.
我正式需要的是:
java.util.Arrays.equals(byte[] a, byte [] b, int length)
Run Code Online (Sandbox Code Playgroud)
有什么意义吗?我没有看到广泛使用的方法.
再次提出要求防止错误答案: - 数组等于长度限制. - 我有手动实现,但我想用标准的东西替换它. - 我不想要任何副本.
先感谢您.