Web Dev

주말 개인 Study

수오니니 2022. 1. 3. 00:02

<스터디 주제>

Java - IO

 

 

<스터디 내용>

Input Stream

Input(1byte)

Reader(1byte)

InputStream is = System.in;

  • byte 단위 입출력 inputstream, outputstream
  • char 단위 입출력 reader writer

파일 : FileInputStream / OutputStream / FileReader / FileWirter

배열 : ByteArrayInputStream / By

byte단위 char단위

  inputstream outputstream reader writer
파일 FileInputStream OutputStream FileReader FileWriter
배열 ByteArrayInputStream ByteArrayOutputStream CharReader CharWriter
장식대상클래스        
  DataInputStream DataOutputStream BufferedReader PrintWriter
장식하는클래스        
  ObjectInputStream ObjectOutputStream    
  DataInputStream DataOutputStream    
         

IO는 수도꼭지에 샤워꼭지를 끼우고 연수기를 끼우고 등등의 방법처럼

여러개 클래스를 생성 넣고 넣고 넣고 하는 식으로 사용한다고함!

 

Byte단위 입출력

FileInputStream의 read()메소드는 1byte씩 읽고 return타입은 정수

정수의 4byte 중 마지막 byte에 읽어드린 1byte를 저장한다.

byte를 return은 끝을 표현할 수 없기 때문 에 int return

음수의 경우 맨 좌측 bit가 1 음수

byte단위는 읽어들일 것이 있다면 항상 양수를 return

 

BufferedReader&PrintWriter

버퍼에 문자단위 입력받은 데이터를 저장 후 한줄씩 입력할 수 있는 클래스.

  • readLine : 버퍼의 문자단위를 한줄로 읽어오는 메소드

 

FileOutputStream

출력 : 입력받은 것을 출력해준다.

  1. InputStreamReader를 통해 Char단위로 입력받아서 bufferedReader를 통해 한줄로 읽음
  2. br.readLine()으로 입력된 한줄을 String str에 저장
  3. new File을 통해 원하는 경로, 원하는 파일명으로 객체 생성 (생성자만 만들어도 객체가 생성되어 메모리에 잡힘???)
  4. FileOutputStream통해 위에 생성된 파일에 출력되는 객체 생성
  5. BR을 통해 입력받은 한줄을 byte로 받아와서 write()메소드를 통해 출력한다.

 

FileWriter

새로쓰기, : 입력받은 것을 기존 내용에 덮어씌워서 새로써서 출력해준다.

write() : 입력받은 내용 또는 텍스트를 파일에 새로써준다

flush() : 입력받은 내용을 삭제 → 다시 입력할 수 있도록 입력객체 유지

close() : 입력객체 종료

 

FileInputStream

  1. File class를 통해 파일을 불러온다.
  2. FileInputStream을 통해 byte단위로 직렬화하여 stream에 넣는다
  3. 직렬화된 byte단위 stream을 bufferedInputStream을 통해 buffer 단위로 저장한다
  4. readAllbytes 를 통해 모든걸 읽어들이고
  5. byte[] 배열안에 집어넣는다
  6. byte[]을 String(Wrapper클래스)타입으로 형변환하여 출력

 

FileCopy

  1. File을 통해 경로를 불러옴
  2. file.exists()로 해당 파일이 있는지 없는지 확인 후
  3. file.getName() 통해 파일명을 불러오고
  4. 복사할 장소의 경로를 새 file객체(tarFile)을 생성
  5. 복사할 곳에 파일이 있는지 tarFile.exist로 확인
  6. 있으면 lastIndexOf를 통해 . 의 위치를 이용 substring을 통해 파일명과 확장자를 분리
  7. newName이란 String 변수에 기존 파일명에 반복문을 통해 (cnt) 식으로 새이름을 tarFIle 객체에 집어넣는다.
  8. 없다면 그대로 새로운 경로에 오리지널 파일명이 tarFIle 객체에 집어넣어짐
  9. 복사할 파일의 길이만큼 byte 배열을 만들고
  10. FileInputStream을 통해 원래 파일객체(경로,파일명)을 byte단위로 0~길이만큼 읽어오고
  11. FileOutputStream을 통해 복사될 파일객체(경로,파일명)을 byte배열의 길이 만큼 출력하여 쓴다(생성을 뜻함)

 

DataInputOutputStream

  1. 파일객체에 특정정보를 입력할 파일명 경로를 삽입
  2. FileOutputStream을 통해 해당 파일을 byte단위로 출력객체에 넣고, DataOutputStream을 통해 출력객체를 데이터형공간 객체에 넣음
  3. 각 데이터 타입의 값을 writeXXXX(데이터타입) 메소드를 통해 객체에 넣어서 1번에 지정한 경로의 파일에 byte단위로 데이터 삽입
  4. 출력객체(쓰기) 종료
  5. FileInputStream을 통해 byte단위로 읽어올 입력객체를 생성, DataInputStream을 통해 데이터단위로 읽어서 byte단위로 읽어옴
  6. readXXXX(데이터타입) 메소드를 통해 File 객체에 저장된 각 데이터 타입의 정보를 byte단위로 읽어온다
  7. 출력

  ※ DataOutputStream(커넥션풀객체 생성시 활용된다고 함.)

 

ObjectOutputStream

  1. 파일객체에 경로를 삽입
  2. FileOutputStream을 통해 파일을 byte단위로 출력할 객체 생성
  3. ObjectOutputStream을 통해 byte단위로 읽어온 출력객체를 객체단위 출력객체로 생성
  4. Serializable 인터페이스를 상속받은 VO Class에 setter를 통해 vo에 입력
  5. OOS의 writeObject 메소드를 이용해서 vo class에 저장된 정보를 byte단위로 직렬화 하여 출력객체를 통해 파일에 씀
  6. 출력객체 닫음

 

ObjectInputStream

  1. 저장된 데이터를 객체단위로 읽어온 정보를 obj 객체에 넣음
  2. vo 타입으로 넣음
  3. vo 클래스의 print 메소드 사용
  4. 각 데이터 타입의 변수에 vo에 저장된 정보를 가져옴
  5. 출력

 

RandomAccessFile

RandomAccessFile객체는 읽기전용("r"), 쓰기전용("w"), 읽기쓰기("rw")가능 설정이 가능하다. 원하는 위치로 이동하여 읽기 쓰기가 가능하다.

  • writeBytes
  • seek

※ 버퍼란

데이터를 전송하는 상호간의 장치에서 고속의 장치와 저속의 장치 간의 속도 차이로 인해

저속의 장치가 작업을 추리하는 동안 고속의 장치가 기다려야 하는 현상을 줄여주는 기술이다.

출처:

https://csw7432.tistory.com/entry/Java-Input-Output-Stream

 

'Web Dev' 카테고리의 다른 글

58일차 Study  (0) 2022.01.04
57일차 Study  (0) 2022.01.04
56일차 Study  (1) 2021.12.31
55일차 Study  (0) 2021.12.31
54일차 Study  (0) 2021.12.30