쌍용교육센터에서 공부한 내용을 정리하며 기록하는 글이고 주관적인 생각이 들어갈 수 있습니다.
잘못된 내용이나 피드백 및 생각 공유는 언제든 환영입니다.
댓글로 남겨주시면 확인 후 수정하겠습니다.
내용에 대한 소스 코드는 https://github.com/2jaehoon/ssangyonng.git에 올려두었습니다.
파일 출력
* FileOutputStream
- 생성과 동시에 파일이 없다면 파일을 생성하고 파일이 있다면 덮어 쓴다.
- binary 데이터를 기록할 수 있다.( 모든 데이터를 내보낼 수 있다. )
- 속도가 빠름
* FileWriter
- 생성과 동시에 파일이 없다면 파일을 생성하고 파일이 있다면 덮어 쓴다.
- 문자열 데이터를 기록
- 속도가 느림
* 스트림은 안 끊으면 누수가 발생하기 때문에 연결하는 것보다 끊는 게 중요하다.
FileOutputStream 사용법
// 1. 생성
FileOutputStream fos = new FileOutputStream( "파일 경로" );
// 파일 경로에서 디렉토리가 존재하지 않으면 error, 파일이 존재하면 덮어 쓰고 파일이 없으면 생성
// 2. 스트림에 파일로 기록할 내용을 쓴다.
fos.write( 값 );
// 3. 스트림에 기록된 내용을 목적지로 분출
fos.flush();
// 4. 스트림 끊기( 스트림에 기록된 내용을 목적지로 분출되고 연결이 끊어진다. )
fos.close();
FileWriter 사용법
// 1. 생성
// 파일 경로에서 디렉토리가 존재하지 않으면 error, 파일이 존재하면 덮어 쓰고 파일이 없으면 생성
BufferedWriter bw = new BufferedWriter( new FileWriter( "파일 경로" ) );
// 2. 스트림에 파일로 기록할 내용을 쓴다.
bw.write( 문자열 );
// 3. 스트림에 기록된 내용을 목적지로 분출
bw.flush();
// 4. 스트림 끊기( 스트림에 기록된 내용을 목적지로 분출되고 연결이 끊어진다. )
bw.close();
파일 복사
- 파일의 내용을 읽어 들여서( FileInputStream )
모든 내용을 목적지로 분출한다.( FileOutputStream )
FileInputStream fis=new FileInputStream( "파일명" );
byte[] data=new byte[512]; //512byte를 저장할 데이터
int bitCnt = 0;
while( ( bitCnt=fis.read(data) ) != -1 ){ //데이터를 읽어들여 byte[]에 저장하고, 저장된 배열의 수를 받는다.
fos.write( data,0, bitCnt); // 출력 스트림에 byte의 배열을 읽어 들인 것 만큼 쓴다.
}
instance 쓰기 / 읽기( marshal Stream )
- 객체( instance )는 Stream을 타고 나갈 수 없다.
- 기본형 데이터형은 Stream을 타고 나갈 수 있다.
- ObjectOutputStream을 사용하면 객체를 JVM 외부로 내보낼 수 있다.
- 객체직렬화( marshal )가 될 수 있는 객체만 나갈 수 있다.( 일반 클래스는 객체직렬화가 되지 않는다. )
- 객체 직렬화( marshal ) : 객체를 스트림을 타고 나갈 수 있도록 일정한 크기로 나누는 것
- transient 직렬화 방지 키워드
'성장 일기 > 쌍용교육센터' 카테고리의 다른 글
0112/Socket, Thread (0) | 2023.01.12 |
---|---|
0111/네트워크, 소켓 통신 (0) | 2023.01.11 |
0109/Stream, File (0) | 2023.01.09 |
0106/예외 처리, Stream (0) | 2023.01.06 |
0105/Font, 예외 처리 (0) | 2023.01.05 |