I/O 스트림 모델(= I/O 모델)
📌 I/O 스트림 모델(= I/O 모델)
: 입출력 대상에 상관없이 동일한 방법으로 입출력 진행 가능하게 하는 것.
입력 스트림과 출력 스트림
📌 입력 스트림(Input Stream)
: 대상으로부터 자료를 읽어 들이는 스트림.
📌 출력 스트림(Output Stream)
: 대상으로 자료를 출력하는 스트림.
📌 System.in.read( )
: 바이트 단위로 읽음.
📄 SystemInTest.java
package iostream;
import java.io.IOException;
public class SystemInTest {
public static void main(String[] args) {
System.out.println("문자열 입력: ");
int i = 0;
try {
while((i = System.in.read()) != '\n') {
System.out.print((char)i);
}
}
catch (IOException e) {
e.printStackTrace();
}
}
}
📌 Scanner 클래스
: 입력 클래스.
📄 ScannerTest.java
package iostream;
import java.util.Scanner;
public class ScannerTest {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
int num = sc.nextInt();
System.out.println(s);
System.out.println(num);
}
}
바이트 스트림과 문자 스트림
📌 바이트 스트림
: 바이트 단위로 데이터를 입출력하는 스트림.
📌 flush( )
: 출력 버퍼 비울 때 사용.
📌 close( )
: 내부에서 flush( )가 호출됨.
📄 FileInOutStreamTest.java
package iostream;
import java.io.OutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
public class FileInOutStreamTest {
public static void main(String[] args) {
try(OutputStream out = new FileOutputStream("data.dat")) { // 출력 스트림 생성.
out.write(10);
out.write(20);
out.write(30);
}
catch(IOException e) {
e.printStackTrace();
}
try(InputStream in = new FileInputStream("data.dat")) { // 입력 스트림 생성.
int d = 0;
while((d = in.read()) != -1) {
System.out.print(d + " "); // 10 20 30
}
}
catch(IOException e) {
e.printStackTrace();
}
}
}
📄 FileInOutputStreamTest.java
package iostream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileInOutputStreamTest {
public static void main(String[] args) {
byte[] bs = new byte[26];
byte data = 65;
for(int i = 0; i < bs.length; i++) {
bs[i] = data++;
}
try(FileOutputStream out = new FileOutputStream("input.txt")) {
out.write(bs);
}
catch(IOException e) {
System.out.println(e);
}
try(FileInputStream in = new FileInputStream("input.txt")) {
byte[] bs2 = new byte[10];
int i;
while((i = in.read(bs2)) != -1) {
for(int j = 0; j < i; j++) {
System.out.print((char)bs2[j]);
}
System.out.println();
}
}
catch(IOException e) {
System.out.println(e);
}
}
}
// ABCDEFGHIJ
// KLMNOPQRST
// UVWXYZ
📌 문자 스트림
: 문자 단위로 읽는 스트림.
📄 FileWriterReaderTest.java
package iostream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class FileWriterReaderTest {
public static void main(String[] args) {
try(FileWriter out = new FileWriter("writer.txt")) { // 출력 스트림 생성.
out.write("a");
char[] chbuf = { 'b', 'c', 'd' };
out.write(chbuf);
out.write("efghick");
out.write("12345");
}
catch(IOException e) {
e.printStackTrace();
}
try(FileReader in = new FileReader("writer.txt")) { // 입력 스트림 생성.
int d = 0;
while((d = in.read()) != -1) {
System.out.print((char)d + " "); // a b c d e f g h i c k 1 2 3 4 5
}
}
catch(IOException e) {
e.printStackTrace();
}
}
}
기반 스트림과 보조 스트림
📌 기반 스트림
: 대상에 직접 자료를 읽고 쓰는 기능의 스트림.
📌 보조 스트림
: 직접 일고 쓰는 기능 없이 추가적인 기능을 더해주는 스트림.
📌 InputStreamReader와 OutputStreamWriter
: 바이트 단위로 읽거나 쓰는 자료를 문자로 변환해주는 보조 스트림.
'Java > Java' 카테고리의 다른 글
[Java] 쓰레드(Thread) 동기화 (0) | 2022.10.24 |
---|---|
[Java] 쓰레드(Thread) (0) | 2022.10.24 |
[Java] 예외 처리 (0) | 2022.10.22 |
[Java] 최종 연산 (0) | 2022.10.21 |
[Java] 중간 연산 - 정렬과 루핑(Looping) (0) | 2022.10.21 |
댓글