如何克隆 Java 字节数组?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/3208899/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-13 17:25:41  来源:igfitidea点击:

How do I clone a java byte array?

java

提问by JavaRocky

I have a byte array which i want to copy/clone to avoid calling code from modifying my internal representation.

我有一个字节数组,我想复制/克隆它以避免调用代码修改我的内部表示。

How do I clone a java byte array?

如何克隆 Java 字节数组?

采纳答案by polygenelubricants

JLS 6.4.5 The Members of an Array Type

The members of an array type are all of the following:

  • The public final field length, which contains the number of components of the array (length may be positive or zero).
  • The publicmethod clone, which overrides the method of the same name in class Objectand throws no checked exceptions. The return type of the clone method of an array type T[]is T[].
  • All the members inherited from class Object; the only method of Objectthat is not inherited is its clonemethod.

JLS 6.4.5 数组类型的成员

数组类型的成员如下:

  • public final field length,其中包含所述阵列的组件的数量(长度可以是正的或零)。
  • public方法clone,它覆盖类同名的方法Object,并没有抛出checked异常。数组类型的 clone 方法的返回类型T[]T[].
  • 从 class 继承的所有成员Object;唯一Object不被继承的clone方法是它的方法。

Thus:

因此:

byte[] original = ...;
byte[] copy = original.clone();

Note that for array of reference types, clone()is essentially a shallow copy.

请注意,对于引用类型的数组,clone()本质上是浅拷贝

Also, Java doesn't have multidimensional arrays; it has array of arrays. Thus, a byte[][]is an Object[], and is also subject to shallow copy.

此外,Java 没有多维数组;它有数组数组。因此, abyte[][]是 an Object[],并且也服从浅拷贝

See also

也可以看看

Related questions

相关问题



Other options

其他选项

Note that clone()returns a newarray object. If you simply want to copy the values from one array to an already existing array, you can use e.g. System.arraycopy.

请注意,clone()返回一个新的数组对象。如果您只是想将值从一个数组复制到一个已经存在的数组,您可以使用 eg System.arraycopy

There's also java.util.Arrays.copyOfthat allows you to create a copy with a different length (either truncating or padding).

java.util.Arrays.copyOf允许您创建具有不同长度(截断或填充)的副本。

Related questions

相关问题

回答by erickson

It's easy, and it's a great idea to do it.

这很容易,而且这样做是个好主意。

byte[] copy = arr.clone();

Note that the return type of the clone()method of arrays is the type of the array, so no cast is required.

注意clone()数组的方法的返回类型是数组的类型,所以不需要强制转换。

回答by TofuBeer

System.arraycopy(src, 0, dst, 0, src.length);

System.arraycopy(src, 0, dst, 0, src.length);

回答by Cooper

In order to avoid a possible Null Pointer Exception I use the following syntax:

为了避免可能的空指针异常,我使用以下语法:

byte[] copy = (arr == null) ? null : arr.clone();