출처 : http://forum.falinux.com/zbxe/index.php?document_srl=571358
Java에서 System.arraycopy() 사용법
전체 데이터가 있을 때, 그 특정 부분만 빼오고 싶을 때가 있습니다.
데이터를 하나씩 읽어가다가 내가 찾는 번지가 나올 때부터 값을 저장하게 하고, 일정 갯수나 위치 만큼 까지만 읽어오게 한다면... 할 수 있지만, 상당히 귀찮은 일입니다.
이런 경우에 쉽게 사용할 수 있는게 System.arraycopy입니다.
배열에서 원하는 부분만 복사한다는 의미로 생각하면 됩니다.
1. System.arraycopy()
Java 코드를 주로 이클립스에서 작성을 하는데, System.arraycopy() 라고 입력을 합니다.
System.arraycopy(arg0, arg1, arg2, arg3, arg4);
예전에는 자세히 뜬거 같은데, 요즘엔 arg 라는 값만 떠서 헷갈리게 합니다.
이런 경우에는, arraycopy 부분에 마우스를 클릭하면 F2를 누르면 자세한 설명이 나옵니다.
2. System.arraycopy() 요소
Object src : 복사하고자 하는 소스입니다. 원본이라고 생각하면 됩니다.
int srcPos : 위의 소스에서 어느 부분부터 읽어올지 위치를 정해줍니다.
Object dest : 원본이 있다면 복사본이 있어야겠지요. 복사하려는 대상입니다.
int destPos : 위의 dest에서 자료를 받을 때, 어느 부분부터 쓸지 시작 위치를 정해줍니다.
int length : 원본에서 복사본까지 얼마큼 읽어 올지 입력하는 것 입니다.
간단하게 앞의 2개는 src(원본)에 관한 것이고, 그 뒤에 2개는 dest(복사본), 마지막으로 length는 가져올 길이라고 생각하면 됩니다.
3. System.arraycopy() 예제 1
사용법에 대해서 설명을 들었으니, 간단하게 예제를 들어보도록 하겠습니다.
원본 배열 이름은 src 라고 하고 복사본은 dest 라고 하겠습니다.
원본 배열은 아래와 같이 00 ~ 0F 까지 차례대로 데이터를 넣었습니다.
복사된 내용을 넣을 배열은 4 바이트 만큼 잡았습니다.
byte[] src = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05 ... 0x0F }
byte[] dest = new byte[4];
이제 System.arraycopy를 사용할 차례입니다.
위에서 배운대로 먼저 배열을 넣어줍니다.
System.arraycopy(src, ?, dest, ?, ?);
그 다음엔 원본에 첫 번째 있는 데이터를 복사본 길이 만큼 넣어주려고 합니다.
src 다음에 0이라고 입력하여, 원본의 첫 데이터부터 복사한다고 정해줍니다.
그 다음 복사된 데이터를 dest의 첫 번째 자리부터 넣을거라고 0이라고 입력을 합니다.
System.arraycopy(src, 0, dest, 0, ?);
그 다음 dest 의 길이인 4 만큼 넣을 것이므로 제일 마지막엔 4 라고 입력을 해줍니다.
System.arraycopy(src, 0, dest, 0, 4);
System.arraycopy를 실행 후에, dest 의 값을 출력하도록 합니다.
아래와 같이 원본의 처음 데이터부터 4번째까지 데이터가 들어왔습니다.
dest 값
0x00, 0x01, 0x02, 0x03
3. System.arraycopy() 예제 2
이번에는 원본에서 처음이 아닌 특정 위치 데이터를 복사본의 특정 위치에 복사를 해보도록 하겠습니다.
byte[] src = { 0x01, 0x02, 0x03, 0x04, 0x05 ... 0x0F }
byte[] dest = new byte[8];
먼저 dest를 출력을 해봅니다.
선언 후에 데이터가 없기 때문에 0으로 출력이 됩니다.
dest 값
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
원본에 있는 데이터를 0x03부터 0x06 까지만 복사하고 싶습니다.
0x03 의 위치인 2를 입력합니다.
그 다음 0x03~0x06 는 갯수가 4개 이므로 4을 입력합니다.
System.arraycopy(src, 2, dest, ?, 4);
이번에는 dest 기준으로 0 이라고 입력하면 처음부터 복사한 데이터를 저장할 것입니다.
이번엔 4번째부터 넣을 예정이니 3이라고 입력을 합니다.
System.arraycopy(src, 2, dest, 3, 4);
System.arraycopy를 수행한 후에 dest 값을 출력해봅니다.
아래와 같이 원하는 위치에 들어가면 문제 없이 출력이 된 것입니다.
dest 값
0x00, 0x00, 0x00, 0x03, 0x04, 0x05, 0x06, 0x00
'Dev. Java' 카테고리의 다른 글
toString 메서드를 만들지 않았을 때는? (0) | 2014.06.11 |
---|---|
[중요] 프로그램과 객체 관계 이해하기 (0) | 2014.06.10 |
[자바 기본기] public static void main(String[] args) 2탄 (0) | 2014.05.31 |
static 블록은 언제 사용하는가? (0) | 2014.05.28 |
[자바 기본기] 인터페이스 (0) | 2014.05.20 |