본문 바로가기

Old Posts226

Java NIO - Chanel 사이의 전송 transferFrom(), transferTo() 입출력 프로그램을 작성할 때 채널과 채널 사이에 데이터를 전송해야할 경우가 있다. 지금까지 정리한 바에 의하면 우선 소스 채널에서 데이터를 버퍼로 읽어들이고, 버퍼에 채워져있는 데이터를 다시 타겟 채널로 쓰는 동작을 생각하게 된다. 하지만 중간에 버퍼가 끼어들게 되면 데이터가 버퍼로 복사되고 다시 채널쪽으로 복사되는 비효율이 있을 수 있다. Java NIO에서는 채널 사이에 데이터를 전송할 수 있도록 transferTo() 메소드와 transferFrom() 메소드를 제공한다. RandomAccessFile sourceFile = new RandomAccessFile("sourceFile.txt", "r"); FileChannel sourceChannel = sourceFile.getChannel(); .. 2020. 12. 31.
[Java 예제] Array를 Set으로 변환 예제 코드 Java에서 배열(Array)을 Set 타입으로 변경하는 코드는 다음과 같다. Set set = new HashSet(Arrays.asList(array)); 배열을 List로 변경한 다음 HashSet의 생성자에 넘겨주면 된다. 참고로 Arrays.asList(array) 동작은 O(1) 연산이다. 그냥 배열을 리스트 API로 해석할 수 있도록 만들어주는 역할을 할 뿐이다. List를 HashSet의 생성자로 넘겨주면, 리스트 크기의 해시 테이블을 먼저 만들고 리스트를 순회하면서 엘리먼트들을 하나씩 HashSet에 추가하는 연산을 수행한다. 즉, 최종적으로는 O(n) 동작이다. Set set = new HashSet(); Collecdtions.addAll(set, array); 결국 풀어쓰면 이 코드.. 2020. 12. 30.
Java NIO - Buffers Java NIO에서 버퍼(Buffer)는 채널(Channel)과 함께 사용된다. 데이터는 채널에서 읽혀 버퍼로 쓰여지거나 버퍼에 있는 데이터가 채널로 쓰여진다. Java NIO 버퍼(Buffer)는 본질적으로 메모리 블럭이다. 메모리의 한 공간에 할당되어 있는 공간을 NIO Buffer객체로 래핑(Wrapping)한 것으로 메모리로의 접근, 사용을 추상화 해 사용하기 편한 메소드를 제공해준다. 사용자는 버퍼에서 데이터를 얻고, 버퍼로 데이터를 저장한 다음 채널에 쓰거나 읽는다. 버퍼를 이용해 채널에서 데이터를 읽는 패턴은 다음과 같다. 버퍼가 채워진다(read from channel) buffer.flip() 메소드를 호출한다 버퍼에서 데이터를 꺼낸다 buffer.clear() 메소드 혹은 buffer... 2020. 12. 30.
Java NIO - Channel, Buffer 그리고 Selector 자바는 Java 4 부터 새로운 입출력 API를 지원하기 시작했다. NIO라는 이름으로 불리는 API는 New IO 혹은 Non-blocking IO라는 뜻을 가지고 있으며 java.nio 패키지로 포함되었다. 이후 Java 7으로 버전을 올리면서 Java IO와 Java NIO 사이의 일관성 없는 클래스 설계를 바로잡고, 비동기 채널 등의 네트워크 지원을 대폭 강화한 NIO 2 API가 추가되었다. Java NIO는 3가지 컴포넌트로 구성되어 있다. Channel Buffers Selectors 실제로는 이것보다 더 많은 컴포넌트들이 있지만 가장 핵심적으로는 저 3가지를 꼽을 수 있다. 채널(Channel) Java NIO의 모든 IO는 '채널(Channel)'에서부터 시작한다. 채널은 스트림과 유사하.. 2020. 12. 29.
[Java 예제] Array를 ArrayList로 변환 배열(Array)에 객체를 ArrayList로 변환해서 사용해야하는 경우가 있다. ArrayList.asList() import java.util.Arrays; import java.util.List; public class Tester { public static void main(String[] args) { String[] array = {"a", "b", "c", "d", "e"}; List list = Arrays.asList(array); System.out.println(list); } } ArrayList.asList()의 경우 배열을 List로 접근할 수 있도록 만들어준다. 대신 add()는 안된다. add()를 호출하면 UnsupportedOperationException이 발생한다. .. 2020. 12. 16.
[Linux] 파일 시스템 확인하기 사용중인 파일 시스템의 이름을 확인해야하는 경우가 있다. df -TH 를 이용한 방법 [root@037b1f55df70 /]# df -TH Filesystem Type Size Used Avail Use% Mounted on overlay overlay 68G 21G 43G 33% / tmpfs tmpfs 68M 0 68M 0% /dev tmpfs tmpfs 1.1G 0 1.1G 0% /sys/fs/cgroup shm tmpfs 68M 0 68M 0% /dev/shm /dev/vda1 ext4 68G 21G 43G 33% /etc/hosts tmpfs tmpfs 1.1G 0 1.1G 0% /proc/acpi tmpfs tmpfs 1.1G 0 1.1G 0% /sys/firmware df -TH 명령을 실행.. 2020. 12. 16.
[Linux] 리눅스 OS 버전 정보 확인하기 클러스터를 운영하면서 특정 호스트의 리눅스 버전을 확인하고 싶은 경우가 있다. 리눅스 운영체제 버전을 확인할 수 있는 방법은 여러가지가 있다. 커널 정보확인 [root@435a98823997 /]# uname -a Linux 435a98823997 5.4.39-linuxkit #1 SMP Fri May 8 23:03:06 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux 리눅스 배포판 정보 확인 1 [root@435a98823997 /]# cat /etc/redhat-release CentOS Linux release 8.2.2004 (Core) 리눅스 배포판 정보 확인 2 [root@435a98823997 /]# cat /etc/issue CentOS Linux release 8... 2020. 12. 10.
[Linux] 디스크 입출력(I/O) 성능 측정하기 - dd, hdparam 명령 빅데이터 클러스터에서 각 호스트 장비의 입출력 성능은 매우 중요하다. 장비의 스펙이 바뀌거나 HDD에서 SSD로 구성을 변경할 때 서버의 입출력 성능을 측정해보고 싶을 때가 있다. 디스크 확인 (df -h) 우선 테스트해볼 디스크 장비를 확인해봐야한다. 시스템에 마운트되어 있는 파일 시스템 정보는 df 명령을 이용해 확인할 수 있다. $ df -h Filesystem Size Used Avail Use% Mounted on /dev/sda1 63G 2.2G 58G 4% /data1 df 명령의 -h 옵션을 이용하면 사람이 읽을 수 있는 (Human Readable) 형태로 정보를 출력해준다. /dev/sda1 디스크에 대한 입출력 성능 측정을 진행하겠다. 1. dd 명령 - 쓰기 성능 테스트 가장 간단하.. 2020. 11. 19.
[Linux] grep 명령어에서 AND, OR, NOT 조건 사용하기 grep은 Bash를 이용해 스크립트를 작성하면서 가장 많이 사용하는 명령 중 하나다. grep은 파일을 읽거나 파이프에서 입력을 받아 특정 패턴을 포함하는 라인만 출력해주는 명령이다. $ cat test.txt example1 example2 exam3 ex4 example $ grep example test.txt example1 example2 example $ cat test.txt | grep example example1 example2 example 주로 특정 패턴에 맞는 내용을 필터링하기 위해 사용한다. 하나 이상의 필터 조건을 AND, OR, NOT 조건으로 사용할 수도 있다. grep 명령어 AND 조건 두 개 이상의 필터 조건을 모두 만족하는 라인만 출력하고 싶을 때는 grep 명령어.. 2020. 11. 19.