자바의 Input과 Ontput에 대해 학습하세요.
BufferedInputStream
BufferedOutputStream
사용해 버퍼 제공 가능java.nio.Buffer
를 상속해 별도의 클래스 제공출저: 오니님의짱깬뽀: java 스트림의 개념, 종류/파일 입출력/InputStream/OutputStream/Reader/Writer
주요 메서드
메서드 | 설명 |
---|---|
void cloase() | 스트림을 닫고 사용하던 자원을 반환 |
abstract int read() | 다음 1byte를 읽어 온다. 읽어올 데이터가 없다면 -1 반환. |
int read(byte[] b) | 배열 b의 크기만큼 다음 byte를 읽으며 배열을 채운다. 읽은 데이터 수를 반환하며, 읽을 데이터가 없다면 -1 반환 |
int read(byte[] b, inf off, int len) | 최대 len개의 다음 byte를 읽고, 배열 b의 off 부터 저장. 읽은 데이터 수 반환하며 읽을 데이터 없다면 -1 반환 |
출저: 오니님의짱깬뽀: java 스트림의 개념, 종류/파일 입출력/InputStream/OutputStream/Reader/Writer
주요 메서드
메서드 | 설명 |
---|---|
void close() | 입력소스를 닫고 사용하던 자원을 반환 |
void flush() | 스트림의 버퍼에 있는 모든 데이터를 출력소스에 쓴다 |
abstract void write(int b) | 주어진 값을 출력소스에 쓴다 |
void write(byte[] b) | b에 저장된 모든 데이터를 출력소스에 쓴다 |
void write(byte[] b, int off, int len) | b의 off부터 len개의 데이터를 읽어서 출력소스에 쓴다 |
flush()
는 버퍼가 있는 경우에만 사용 의미가 있다출저: 오니님의짱깬뽀: java 스트림의 개념, 종류/파일 입출력/InputStream/OutputStream/Reader/Writer
출저: 오니님의짱깬뽀: java 스트림의 개념, 종류/파일 입출력/InputStream/OutputStream/Reader/Writer
java.lang.System
public final class System {
...
public final static InputStream in = nullInputStream();
public final static PrintStream out = nullPrintStream();
public final static PrintStream err = nullPrintStream();
...
}
보조_스트림 변수 = new 보조_스트림(연결_스트림)
//기반 스트림
FileInputStream fis = new FileInputStream("hello.text");
//보조 스트림 생성
BufferedInputStream bis = new BufferedInputStream(fis);
입력 | 출력 | 설명 |
---|---|---|
BufferedInputStream | BufferedOutputStream | 버퍼를 이용한 입출력 성능 개선 |
DataInputStream | DataOutputStream | 프리미티브 타입 단위로 데이터 제어 |
FilterInputStream | FilterOutputStream | 필터를 이용한 입출력 처리 |
ObjectInputStream | ObjectOutputStream | 데이터 객체 단위로 처리, 직렬화와 역직렬화 관련 |
PrintStream | print() 관련 버퍼 이용한 추가적인 기능 제공 print(), println(), printf() | |
PushbackInputStream | 버퍼를 이용해 읽어온 데이터 되돌리기 가능 | |
SequenceInputStream | 두 개의 스트림을 하나로 연결 |
보조 스트림은 어떻게 스트렘에 동적으로 새로운 책임을 추가할까?
출저: w3sdesign
데코레이터 패턴 적용전
데코레이터 패턴 적용후
코드
public interface MyOutput {
public void write();
}
public class MyHelloOutput implements MyOutput{
@Override
public void write() {
System.out.println("MyHelloOutput: hello");
}
}
public abstract class MyOutputDecorator implements MyOutput {
private MyOutput out;
public MyOutputDecorator(MyOutput out) {
this.out = out;
}
@Override
public void write() {
out.write();
}
}
public class MyBufferdOutput extends MyOutputDecorator{
public MyBufferdOutput(MyOutput out) {
super(out);
}
@Override
public void write() {
System.out.println("MyBufferdOutput: buffer...");
super.write();
}
}
public class MyFilterOutput extends MyOutputDecorator{
public MyFilterOutput(MyOutput out) {
super(out);
}
@Override
public void write() {
System.out.println("MyFilterOutput: filter...");
super.write();
}
}
public class DecoratorPattern {
public static void main(String[] args) {
new MyHelloOutput().write();
System.out.println("===========================");
new MyBufferdOutput(new MyHelloOutput()).write();
System.out.println("===========================");
new MyFilterOutput(
new MyBufferdOutput(
new MyHelloOutput())
).write();
}
}
/*
MyHelloOutput: hello
===========================
MyBufferdOutput: buffer...
MyHelloOutput: hello
===========================
MyFilterOutput: filter...
MyBufferdOutput: buffer...
MyHelloOutput: hello
*/
관련 읽을 거리
*.min.*
처럼 해주는 예제package week13;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class MinMaker {
public static void main(String[] args) {
try (BufferedReader bfr = new BufferedReader(new FileReader(args[0]));
BufferedWriter bfw = new BufferedWriter(new FileWriter(args[1]))){
int data = 0;
while((data = bfr.read()) != -1){
if(data != '\t' && data != '\n' && data != ' ' && data != '\r'){
bfw.write(data);
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
D:\javaBox> java week13.MinMaker week13/MinMaker.java week13/MinMaker.min.java
MinMaker.min.java 파일 생성
packageweek13;importjava.io.BufferedReader;importjava.io.BufferedWriter;importjava.io.FileReader;importjava.io.FileWriter;importjava.io.IOException;publicclassMinMaker{publicstaticvoidmain(String[]args){try(BufferedReaderbfr=newBufferedReader(newFileReader(args[0]));BufferedWriterbfw=newBufferedWriter(newFileWriter(args[1]))){intdata=0;while((data=bfr.read())!=-1){if(data!='\t'&&data!='\n'&&data!=''&&data!='\r'){bfw.write(data);}}}catch(IOExceptione){e.printStackTrace();}}}
📑📌📜✏️