2 바이트 배열을 결합하는 방법
이 질문에 이미 답변이 있습니다.
- 2 바이트 배열을 연결하는 쉬운 방법 12 답변
2 바이트 배열이 있는데 하나를 다른 배열에 추가하거나 결합하여 새 바이트 배열을 형성하는 방법에 대해 궁금합니다.
두 byte
배열 을 연결하려는 건가요?
byte[] one = getBytesForOne();
byte[] two = getBytesForTwo();
byte[] combined = new byte[one.length + two.length];
for (int i = 0; i < combined.length; ++i)
{
combined[i] = i < one.length ? one[i] : two[i - one.length];
}
또는 다음을 사용할 수 있습니다 System.arraycopy
.
byte[] one = getBytesForOne();
byte[] two = getBytesForTwo();
byte[] combined = new byte[one.length + two.length];
System.arraycopy(one,0,combined,0 ,one.length);
System.arraycopy(two,0,combined,one.length,two.length);
또는 a List
를 사용 하여 작업을 수행 할 수 있습니다.
byte[] one = getBytesForOne();
byte[] two = getBytesForTwo();
List<Byte> list = new ArrayList<Byte>(Arrays.<Byte>asList(one));
list.addAll(Arrays.<Byte>asList(two));
byte[] combined = list.toArray(new byte[list.size()]);
또는 단순히 ByteBuffer
많은 어레이를 추가하는 이점으로 사용할 수 있습니다.
byte[] allByteArray = new byte[one.length + two.length + three.length];
ByteBuffer buff = ByteBuffer.wrap(allByteArray);
buff.put(one);
buff.put(two);
buff.put(three);
byte[] combined = buff.array();
Apace 공통 lang 패키지 ( org.apache.commons.lang.ArrayUtils
class) 를 사용하여이를 수행 할 수 있습니다 . 다음을 수행해야합니다.
byte[] concatBytes = ArrayUtils.addAll(one,two);
최선의 접근이라고 생각합니다.
public static byte[] addAll(final byte[] array1, byte[] array2) {
byte[] joinedArray = Arrays.copyOf(array1, array1.length + array2.length);
System.arraycopy(array2, 0, joinedArray, array1.length, array2.length);
return joinedArray;
}
String temp = passwordSalt;
byte[] byteSalt = temp.getBytes();
int start = 32;
for (int i = 0; i < byteData.length; i ++)
{
byteData[start + i] = byteSalt[i];
}
여기서 코드의 문제는 배열을 인덱싱하는 데 사용되는 변수 i가 byteSalt 배열과 byteData 배열을 모두 지나간다는 것입니다. 따라서 byteData가 최소한 passwordSalt 문자열의 최대 길이에 32를 더한 값이되도록 차원이 지정되었는지 확인하십시오. 다음 행을 수정하면 수정됩니다.
for (int i = 0; i < byteData.length; i ++)
와:
for (int i = 0; i < byteSalt.length; i ++)
byteData
배열이 더 크다고 가정하면 32 + byteSalt.length()
... 길이가 아니라 byteSalt.length
. 배열 끝 너머에서 복사하려고합니다.
나는 appendData를 수행하고 배열과 함께 단일 바이트를 전달하거나 두 배열을 결합하여 매우 잘 작동하는이 코드를 사용했습니다.
protected byte[] appendData(byte firstObject,byte[] secondObject){
byte[] byteArray= {firstObject};
return appendData(byteArray,secondObject);
}
protected byte[] appendData(byte[] firstObject,byte secondByte){
byte[] byteArray= {secondByte};
return appendData(firstObject,byteArray);
}
protected byte[] appendData(byte[] firstObject,byte[] secondObject){
ByteArrayOutputStream outputStream = new ByteArrayOutputStream( );
try {
if (firstObject!=null && firstObject.length!=0)
outputStream.write(firstObject);
if (secondObject!=null && secondObject.length!=0)
outputStream.write(secondObject);
} catch (IOException e) {
e.printStackTrace();
}
return outputStream.toByteArray();
}
간단한 방법 (인라인, 가정 a
및 b
주어진 두 배열이다)
byte[] c = (new String(a, cch) + new String(b, cch)).getBytes(cch);
This, of course, works with more than two summands and uses a concatenation charset, defined somewhere in your code:
static final java.nio.charset.Charset cch = java.nio.charset.StandardCharsets.ISO_8859_1;
Or, in more simple form, without this charset:
byte[] c = (new String(a, "l1") + new String(b, "l1")).getBytes("l1");
But you need to suppress UnsupportedEncodingException
which is unlikely to be thrown.
The fastest method:
public static byte[] concat(byte[] a, byte[] b) {
int lenA = a.length;
int lenB = b.length;
byte[] c = Arrays.copyOf(a, lenA + lenB);
System.arraycopy(b, 0, c, lenA, lenB);
return c;
}
참고URL : https://stackoverflow.com/questions/5683486/how-to-combine-two-byte-arrays
'Programing' 카테고리의 다른 글
멀티 코어 시스템에 대한 작업 (-j) 플래그를 자동으로 설정 하시겠습니까? (0) | 2020.12.11 |
---|---|
hazelcast 대 ehcache (0) | 2020.12.11 |
mvnrepository.com의 maven 프로필을 알고 있습니까? (0) | 2020.12.11 |
최대 절전 모드에서 Postgres 연결 획득 속도가 느림 (0) | 2020.12.11 |
TimeSpan에서 DateTime으로 변환 (0) | 2020.12.11 |