컴퓨터공학 💻 도서관📚
Part2. 6-14 바이트 단위 입출력 스트림 본문
여기서는 주로 파일 입출력을 얘기한다고 한다.
가장 많이 사용하는 입출력 중 하나가 파일이다.
그래서 파일에서 어떻게 입력이 일어나고, 어떻게 출력을 하는지 살펴본다고 한다.
InputStream
- '바이트 단위 입력 스트림' 최상위 추상 클래스
- 많은 추상 메서드가 선언되어 있고 이를 하위 스트림이 상속받아 구현함
- 주요 하위 클래스
- 주요 메서드
FileInputStream 예제
- 파일에서 한 바이트씩 자료 읽기
public class FileInputStreamTest1 {
public static void main(String[] args) {
FileInputStream fis = null;
try {
fis = new FileInputStream("input.txt");
System.out.println((char)fis.read());
System.out.println((char)fis.read());
System.out.println((char)fis.read());
} catch (IOException e) {
System.out.println(e);
} finally{
try {
fis.close();
} catch (IOException e) {
System.out.println(e);
} catch (NullPointerException e){
System.out.println(e);
}
}
System.out.println("end");
}
}
- 파일의 끝까지 한 바이트씩 자료 읽기
public class FileInputStreamTest2 {
public static void main(String[] args) {
try(FileInputStream fis = new FileInputStream("input.txt")){
int i;
while ( (i = fis.read()) != -1){
System.out.println((char)i);
}
System.out.println("end");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
- 파일에서 바이트 배열로 자료 읽기 ( 배열에 남아 있는 자료가 있을 수 있음에 유의 )
public class FileInputStreamTest3 {
public static void main(String[] args) {
try (FileInputStream fis = new FileInputStream("input2.txt")){
byte[] bs = new byte[10];
int i;
while ( (i = fis.read(bs)) != -1){
/*for(byte b : bs){
System.out.print((char)b);
}*/
for(int k= 0; k<i; k++){
System.out.print((char)bs[k]);
}
System.out.println(": " +i + "바이트 읽음" );
}
/*while ( (i = fis.read(bs, 1, 9)) != -1){
for(int k= 0; k<i; k++){
System.out.print((char)bs[k]);
}
System.out.println(": " +i + "바이트 읽음" );
}*/
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("end");
}
}

OutputStream
- 바이트 단위 출력 스트림 최상위 추상 클래스
- 많은 추상 메서드가 선언되어 있고 이를 하위 스트림이 상속받아 구현함
- 주요 하위 클래스
- 주요 메서드
FileOutputStream 예제
- 파일에 한 바이트씩 쓰기
public class FileOutputStreamTest1 {
public static void main(String[] args) {
try(FileOutputStream fos = new FileOutputStream("output.txt")){
fos.write(65); //A
fos.write(66); //B
fos.write(67); //C
}catch(IOException e) {
e.printStackTrace();
}
System.out.println("출력이 완료되었습니다.");
}
}
- byte[ ] 배열에 A-Z 까지 넣고 배열을 한꺼번에 파일에 쓰기
public class FileOutputStreamTest2 {
public static void main(String[] args) throws IOException {
FileOutputStream fos = new FileOutputStream("output2.txt",true);
try(fos){ //java 9 부터 제공되는 기능
byte[] bs = new byte[26];
byte data = 65; //'A' 의 아스키 값
for(int i = 0; i < bs.length; i++){ // A-Z 까지 배열에 넣기
bs[i] = data;
data++;
}
fos.write(bs); //배열 한꺼번에 출력하기
}catch(IOException e) {
e.printStackTrace();
}
System.out.println("출력이 완료되었습니다.");
}
}
- byte[ ] 배열의 특정 위치에서 부터 정해진 길이 만큼 쓰기
public class FileOutputStreamTest3 {
public static void main(String[] args) {
try(FileOutputStream fos = new FileOutputStream("output3.txt"))
{
byte[] bs = new byte[26];
byte data = 65; //'A' 의 아스키 값
for(int i = 0; i < bs.length; i++){ // A-Z 까지 배열에 넣기
bs[i] = data;
data++;
}
fos.write(bs, 2, 10); // 배열의 2 번째 위치부터 10 개 바이트 출력하기
}catch(IOException e) {
e.printStackTrace();
}
System.out.println("출력이 완료되었습니다.");
}
}
flush() 와 close() 메서드
- 출력 버퍼를 비울때 flush() 메서드를 사용
- close() 메서드 내부에서 flush()가 호출되므로 close()메서드가 호출되면 출력 버퍼가 비워짐
'✅🌲강의 복습 노트 > 패캠 JavaSpring 강의,코드 복습' 카테고리의 다른 글
Part2. 6-13 표준 입출력 스트림 (0) | 2025.08.22 |
---|---|
Part2. 6-12 자바의 입출력을 위한 I/O 스트림 (통합 연산 도구) (0) | 2025.08.21 |
Part2. 6-11 오류의 로그를 남기기 - java.util.logging.Logger 활용 (이해 잘 안 됨...) (3) | 2025.08.15 |
Part2. 6-10 사용자 정의 예외 클래스와 그 활용 (1) | 2025.08.15 |
Part2. 6-9 예외 처리하기와 미루기 (5) | 2025.08.14 |
Comments