전체 글 썸네일형 리스트형 [Java] 입출력 I/O - 바이트기반의 보조스트림 (1)Filter, Buffered FilterInputStream과 FilterOutputStream FilterInputStream과 FilterOutputStream은 InputStream과 OutputStream의 자손이면서 모든 보조스트림의 조상이다. 보조스트림은 자체적으로 입출력을 수행할 수 없기 때문에 기반스트림을 필요로한다. 다음은 FilterInputStream과 FilterOutputStream의 생성자이다. protected FilterInputStream(InputStream in) public FilterOutputStream(OutputStream out) FilterInputStream과 FilterOutputStream의 모든 메서드는 단순히 기반스트림의 메서드를 그래도 호출할 뿐이다. FilterInputSt.. 더보기 [Java] 입출력 I/O - 바이트기반 스트림 InputStream과 OutputStream 앞서 얘기한 바와 같이 InputStream과 OutputStream은 모든 바이트기반의 스트림의 조상이며 다음과 같은 메서드가 선언되어 있다. InputStream의 메서드 메서드명 설명 int available() 스트림으로부터 읽어 올 수 있는 데이터의 크기를 반환한다. void close() 스트림을 닫음으로써 사용하고 있던 자원을 반환한다. void mark(int readlimit) 현재위치를 표시해 놓는다. 후에 reset()에 의해서 표시해 놓은 위치로 다시 돌아갈 수 있다. readlimit은 되돌아갈 수 있는 byte의 수이다. boolean markSupported() mark()와 reset()을 지원하는지를 알려준다. mark()와 r.. 더보기 [Java] 입출력 I/O - 자바에서의 입출력 입출력이란? I/O란 Input과 Output의 약자로 입력과 출력, 간단히 줄여서 입출력이라고 한다. 입출력은 컴퓨터 내부 또는 외부의 장치와 프로그램간의 데이터를 주고받는 것을 말한다. 예를 들면 키보드로부터 데이터를 입력받는다든가 System.out.println() 을 이용해서 화면에 출력한다던가 하는 것이 가장 기본적인 입출력의 예시이다. 스트림(Stream) 자바에서 입출력을 수행하려면, 즉 어느 한쪽에서 다른 쪽으로 데이터를 전달하려면, 두 대상을 연결하고 데이터를 전송할 수 있는 무언가가 필요한데 이것을 스트림(Stream)이라고 정의했다. 람다와 스트림에서의 스트림과 같은 용어를 사용하지만 다른 개념이다. 스트림은 연속적인 데이터의 흐름에 물에 비유해서 붙여진 이름인데, 여러 가지로 유사.. 더보기 [Java] 쓰레드 - volatile 싱글 코어 프로세서가 장착된 컴퓨터에서는 다음 예제가 아무런 문제없이 실행될 것이다. class ThreadEx1 { public static void main(String[] args) { RunImplEx1 r1 = new RunImplEx1(); RunImplEx1 r2 = new RunImplEx1(); RunImplEx1 r3 = new RunImplEx1(); Thread th1 = new Thread(r1. "*"); Thread th2 = new Thread(r1. "**"); Thread th3 = new Thread(r1. "***"); th1.start(); th2.start(); th3.start(); try { Thread.sleep(2000); r1.suspend(); // th.. 더보기 [Java] 컬렉션 프레임워크 - Collections Arrays가 배열과 관련된 메서드를 제공하는 것처럼, Collections는 컬렉션과 관련된 메서드를 제공한다. fill(), copy(), sort(), binarySearch() 등의 메서드는 두 클래스에 모두 포함되어 있으며 같은 기능을 한다. 컬렉션의 동기화 멀티 쓰레드(multi-thread) 프로그래밍에서는 하나의 객체를 여러 쓰레드가 동시에 접근할 수 있기 때문에 데이터의 일관성(cnosistency)를 유지하기 위해서는 공유되는 객체에 동기화(synchronization)가 필요하다. Vector와 Hashtable과 같은 구버전의 클래스들은 자체적으로 동기화 처리가 되어 있는데, 멀티쓰레드 프로그래밍이 아닌 경우에는 불필요한 기능이 되어 성능을 떨어뜨리는 요인이 된다. 그래서 새로 추가.. 더보기 [Java] 컬렉션 프레임워크 - Properties Properties는 HashMap의 구버전인 Hashtable을 상속받아 구현한 것으로, Hashtable은 키와 값을 (Object, Object)의 형태로 저장하는데 비해 Properties는 (String, String)의 형태로 저장하는 보다 단순화된 컬렉션클래스이다. 주로 애플리케이션의 환경설정과 관련된 속성을 저장하는데 사용되며 데이터를 파일로부터 읽고 쓰는 편리한 기능을 제공한다. 그래서 간단한 입출력은 Properties를 활용하면 몇 줄의 코드로 쉽게 해결될 수 있다. 메서드 설명 Properties() Properties객체를 생성한다. Properties(Properties defaults) 지정된 Properties에 저장된 목록을 가진 Properties객체를 생성한다. Stri.. 더보기 [Java] 컬렉션 프레임워크 - TreeMap TreeMap은 이름에서 알 수 있듯이 이진검색트리의 형태로 키와 값의 쌍으로 이루어진 데이터를 저장한다. 그래서 검색과 정렬에 적합한 컬렉션 클래스이다. HashMap과 TreeMap의 검색성능에 관해 설명할게 있다. 검색에 관한 대부분의 경우에서 HashMap이 TreeMap보다 더 뛰어나므로 HashMap을 사용하는 것이 좋다. 다만, 범위검색이나 정렬이 필요한 경우에는 TreeMap을 사용하는 것이 더 편리할 것이다. 메서드 설명 TreeMap() TreeMap 객체를 생성 TreeMap(Comparator c) 지정된 Comparator를 기준으로 정렬하는 TreeMap 객체를 생성 TreeMap(Map m) 주어진 Map에 저장된 모든 요소를 포함하는 TreeMap을 생성 TreeMap(Sor.. 더보기 [Java] 컬렉션 프레임워크 - 해싱과 해싱함수 해싱이란 해시함수(hash function)을 이용해서 데이터를 해시테이블(hash table)에 저장하고 검색하는 기법을 말한다. 해시함수는 데이터가 저장되어 있는 곳을 알려 주기 때문에 다량의 데이터 중에서도 원하는 데이터를 빠르게 찾을 수 있다. 해싱을 구현한 컬렉션 클래스로는 HashSet, HashMap, Hashtable 등이 있다. Hash table은 컬렉션 프레임워크가 도입되면서 HashMap으로 대체되었으나 이전 소스와의 호환성 문제로 남겨두고 있다. 가능하면 Hashtable 대신 HashMap을 사용하자. 해싱에서 사용하는 자료구조는 배열과 링크드리스트의 조합으로 되어 있다. 저장할 데이터의 키를 해시함수에 넣으면 배열의 한 요소를 얻게 되고, 다시 그 곳에 연결되어 있는 링크드리스.. 더보기 이전 1 2 3 4 5 6 ··· 16 다음