【发布时间】:2012-11-04 10:10:34
【问题描述】:
我想知道是否可以使用偏移量访问 byte[] 而无需复制数据?
我查看了Arrays.*、ByteArrayInputStream 和System.arraycopy,但它们都需要分配一个新的byte[] 来复制到。
我想要的是与C++中的这个等价的:
char* buffer = new char[256];
char* buf_offset = buffer + 128; // <- no copy
【问题讨论】:
-
在 Java 中没有直接的等价物,但例如
String的实现是为了实现非常相似的事情:substring()返回一个新的String实例,该实例在内部使用完全相同的 @ 987654331@为原文。这将是惯用的 Java 方式。 -
这就是为什么采用
byte数组的API 通常会有两个额外的参数——offset和length:) -
@MarkoTopolnik:
substring()可以那样工作,但不是必须的。我相信 Sun JRE 最近在这方面发生了变化。 -
@MarkoTopolnik,oracle 更改了 substring() ......
-
@MarkoTopolnik 您应该检查更新的版本,b147 是古老的。我认为是在 1.7u6 左右
标签: java arrays performance memory-management bytearray