입출력
외부 데이터는 자바 프로그램 외부에 존재하는 모든 데이터를 의미
하드 디스크상의 프로그램, 네트워크 상의 리소스, 메모리에 있는 자바 프로그램을 제외한 리소스 모두 외부 데이터
외부 데이터의 타입이 무엇이든 외부 데이터를 읽기나 쓰기 작업 시에 java.io나 java.nio의 객체를 사용
IO API
Input
~InputStream (1바이트), ~Reader(2바이트) 로 끝나는 객체는 외부 데이터를 읽어오는 기능을 가진 입력 스트림
Output
~OutputStream, ~Writer로 끝나는 객체는 외부로 데이터를 출력하는 기능을 가진 출력 스트림
스트림 객체에서 Stream, Reader, Writer를 제외한 부분이 외부 데이터 타입을 가리킴
표준 입출력
입출력 대상을 지정하지 않았을 경우에 사용되는 입출력
프로그램에서 표준 입력은 키보드이고 표준 출력은 모니터
java.lang.System 클래스
제어자 및 타입 | 필드 | 설명 |
static PrintStream | err | 표준 에러 출력 스트림 |
static InputStream | in | 표준 입력 스트림 |
static PrintStream | out | 표준 출력 스트림 |
기본, 필터 스트림
java.io의 입출력 스트림들은 기본 스트림과 필터 스트림으로 분류
기본 스트림
읽거나 출력하는 외부 데이터와 직접 연결되는 스트림
필터 스트림
본 스트림에 추가로 사용할 수 있는 스트림
Bufferd, DataInput, Print 등의 기능을 제공해 IO Stream을 편리하게 사용
기본 스트림의 생성자로 외부 데이터 타입을 받고, 필터 스트림은 생성자로 기본 스트림을 받음
FileReader(String fileName) // 기본 스트림
BufferedReader(Reader in) // 필터 스트림
RandomAccessFile 클래스
InputSteam/Reader, OutputStream/Writer의 입출력 스트림을 사용해 파일의 내용을 읽거나 쓰기 작업을 할 때는 파일의 처음부터 순서대로 읽기, 쓰기 작업이 필요하다. 만약 파일의 일부분만 변경하거나 읽어올 때는 불필요한 부분을 건너뛰는 작업을 해야해서 비효율적인데 java.io.RandomAccessFile 클래스가 해당 문제점을 해결한다.
RandomAccessFile 클래스 메소드
제어자 및 타입 | 메서드 | 설명 |
void | seek(long pos) | 파일 포인터의 위치를 매개변수로 전달받은 바이트 수만큼 이동 |
int | read() | 파일로부터 한 바이트 읽어옴 |
int | read(byte[] b) | 매개변수로 전달받은 바이트 배열의 길이만큼 읽어와 배열에 저장 |
void | write(byte[] b) | 매개 변수로 전달받은 바이트 배열의 내용을 파일에 출력 |
Serializable 인터페이스
작성 포스팅 JAVA 직렬화, 역직렬화
참고
처음해보는 자바 프로그래밍 - 오정임
https://coding-factory.tistory.com/281