입출력 담당 패키지

이은영·2022년 6월 20일
0

자바

목록 보기
1/5
post-thumbnail

java.io패키지

바이트 기반 스트림 1byte

그림, 멀티미디어, 문자 등 모든 종류의 데이터를 받고 보내는 것 가능,주로 문자 사용 (바이트 1byte씩 문자 2byte씩 보냄)

InputStream

최상위 클래스

  • read()메소드
  • read(byte[] b, int off, int len)
    입력 스트림으로부터 len 개의 바이트 만큼 읽고 매개값으로 주어진 바이트 배열 b[off] ~ lenRo개까지 저장 만약 len개를 모두 읽지 못하면 실제 읽은 바이트 수를 리턴한다.
    더 이상 입력 스트림으로부터 바이트를 읽을 수 없다면 read()메소드는 -1을 리턴
InputStream is = new FileInputStream("C:/test.jpg");
int readByte;
byte[] readBytes = new byte[100] //read(byte[] b) 많은 데이터를 읽을 때 효과적
int readByteNo = is.read(readBytes); //차이점
int readByteNo. = is.read(readBytes,0,100); //차이점
while((readByte = is.read(readBytes)) != -1) {}

❗️많은 양의 바이트를 읽을 때는 read(byte[] b) 메소드를 사용하는 것이 좋음

  • close()메소드
    is.close()
    InputStream에서 사용했던 시스템 자원을 풀어줌
    이상한 일이 생긴 일을 방지하기 위해서 파일을 열었으면 무조건 닫아줘야 한다.

OutputStream

최상위 클래스

  • write(int b) : 1바이트만 출력스트림으로 보냄 매개변수가 int타입이므로 4바이트 모두를 보내는 것으로 생각NONO 1byte만 보낸다.
  • wirte(byte[] b)
  • write(byte[] b, int off, int len)
  • flush() : 버퍼에 잔류하는 모든 바이트를 출력한다.
OutputStream os = new FileOutputStream("C:/test.txt");
byte[] data = "ABC".getByte();
for(int i=0; i<data.length; i++){
	os.write(data[i]); // "A","B","C"를 하나씩 출력
}
os.write(data); // "ABC" 모두 출력
os.wirte(data,1,2); //"BC"만 출력
os.flush(); //남은 버퍼의 데이터를 출력
os.close();

문자 기반 입력 스트림 2byte

Reader

최상위 클래스

  • read() : 한 개의 문자(2바이트)를 읽고 4바이트 int타입으로 리턴함 read() 메소드가 리턴한 int값을 char타입으로 변환하면 읽은 문자를 얻을 수 있음💢❓💢❓💢❓
Reader reader = new FileInputStream("C:/text.txt");
int readDate;
while((readDate = reader.read()) != -1) {
	char charData = (char) readData; //읽은 문자를 얻을 수 있음
}
  • read(char[] cbuf) : 많은 양의 문자를 읽을 때는 read(char[] cbuf)메소드를 사용함
Reader reader = new FileInputStream("C:/text.txt");
int readCharNo;
int readCharNo = reader.read(cbuf); //차이점
int readCharNo = reader.read(cbuf,0,100); //차이점
char[] cbuf = new char[2];
while((readCharNo = reader.read(cbuf)) != -1) {}

Wirter

최상위 클래스

  • write(int c) : 매개변수로 주어진 int값에서 끝에 있는 2바이트(한 개의 문자)만 출력 스트림으로 보냄, 매개변수가 int타입이므로 4바이트 모두를 보내는 것으로 생각할 수 있음에 주의 ❗️
  • write(char[] cbuf) : 매개값으로 주어진 char[] 배열의 모든 문자를 출력 스트림으로 보냄
  • write(char[], int off, int len) : c[off]부터 len개의 문자를 출력 스트림으로 보냄
    문자열을 좀 더 쉽게 보내기 위해서
  • write(String str) : 문자열 전체를 출력 스트림으로 보냄
  • write(String str, int off, int len) : 문자열 off순번부터 len개까지의 문자를 보냄
Writer writer = new FileWriter("C:/test.txt");
char[] data = "홍길동".toCharArray();
for(int i=0; i<data.length; i++){
	writer.write(data[i]); // "홍","길","동"을 하나씩 출력
}
writer.write(data); // "홍길동" 모두 출력 
writer.write(data,1,2); //"길동"만 출력
writer.flush();
writer.close();

문자 출력 스트림은 내부에 작은 버퍼(buffer)가 있어서 문자가 출력되기 전에 버퍼에 쌓여있다가 순서대로 출력됨
flush()메소드는 버퍼에 잔류하고 있는 문자를 모두 출력시키고 버퍼를 비움
프로그램에서 더 이상 출력할 문자가 없다면 flush()메소드를 마지막으로 호출하여 버퍼에 잔류하는 모든 문자가 출력되도록 해야함
Writer를 더 이상 사용하지 않을 경우에는 close()메소드를 호출해서 Writer에서 사용했던 시스템 자원을 풀어줌

profile
성장중인 개발자 (머리속의 생각을 글로 옮기는 연습을 하고 있습니다.)

0개의 댓글