I have a byte array which i want to copy/clone to avoid calling code f开发者_开发知识库rom modifying my internal representation.
How do I clone a java byte array?
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
public
methodclone
, which overrides the method of the same name in classObject
and throws no checked exceptions. The return type of the clone method of an array typeT[]
isT[]
.- All the members inherited from class
Object
; the only method ofObject
that is not inherited is itsclone
method.
Thus:
byte[] original = ...;
byte[] copy = original.clone();
Note that for array of reference types, clone()
is essentially a shallow copy.
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.
See also
- Wikipedia/Object copy
- Java Nuts and Bolts/Arrays
Related questions
- Deep cloning multidimensional arrays in Java… ?
- How to effectively copy an array in java ?
- How to deep copy an irregular 2D array
- How do I do a deep copy of a 2d array in Java?
Other options
Note that clone()
returns a new array object. If you simply want to copy the values from one array to an already existing array, you can use e.g. System.arraycopy
(jdk 1.0+).
There's also java.util.Arrays
.copyOf (jdk 1.6+) that allows you to create a copy with a different length (either truncating or padding).
Related questions
- Difference between various Array copy methods
System.arraycopy(src, 0, dst, 0, src.length);
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.
In order to avoid a possible Null Pointer Exception I use the following syntax:
byte[] copy = (arr == null) ? null : arr.clone();
精彩评论