자바 IO 흐름 조작
7263 단어 자바
자바 에서 I/O 작업 은 주로 자바.io 패키지 의 내용 을 사용 하여 입 출력 작업 을 하 는 것 을 말한다.입력 도 읽 기 데이터 라 고 하고 출력 도 쓰기 데이터 라 고 합 니 다.
입 출력(IO):입 출력 은 컴퓨터 와 그 어떠한 외부 장치 간 의 데이터 전달 을 말한다.
IO 흐름 에서 입 출력 은 4 단계 로 나 뉜 다.포맷/해석,버퍼,인 코딩 변환 과 전달 이다.포맷/해석:내부 데이터 표시(바이트 단위)와 외부 데이터 표시(문자 단위)사이 에서 양 방향 변환 을 합 니 다.예 를 들 어 2 바이트 의 정수 10002 는 5 글자 로 표시 해 야 한다.
버퍼:형식/해석 및 전달 사이 에 캐 시 문자 시퀀스 를 사용 합 니 다.출력 에 대해 비교적 짧 은 문자 시퀀스 를 포맷 한 후 바로 출력 하지 않 고 버퍼 에 저장 하여 일정 규모 로 누적 한 후에 외부 장치 로 전달 합 니 다.반면 외부 장치 에서 읽 은 대량의 데이터 도 버퍼 에 두 고 입력 을 점차적으로 꺼 냈 다.기본적으로 IO 스 트림 의 입 출력 은 버퍼 를 거 쳐 IO 스 트림 을 버퍼 없 이 작업 할 수 있 습 니 다.
인 코딩 변환:하나의 문자 표현 식 을 다른 문자 표현 식 으로 변환 합 니 다.포맷 된 문자 표현 식 이 외부 문자 표현 식 과 다 르 거나 외부 표현 식 이 IO 흐름 과 해석 할 수 있 는 표현 식 과 다 르 면 인 코딩 변환 을 해 야 합 니 다.다 중 바이트 인 코딩 과 넓 은 문자 인 코딩 간 의 변환 등.대부분의 경우 인 코딩 변환 이 필요 하지 않 습 니 다.
전달:주로 외부 장치 와 통신 합 니 다.출력 할 때 전달 은 포맷,버퍼,인 코딩 변환 을 거 친 문자 시퀀스 를 외부 장치 로 보 냅 니 다.입력 할 때 외부 장 치 를 데 이 터 를 추출 하여 그 후의 인 코딩 변환,버퍼 및 해석 에 문자 순 서 를 제공 합 니 다.
IO 흐름 의 분류:
데이터 의 흐름 에 따라 다음 과 같이 나 뉜 다.
데이터 의 유형 에 따라 다음 과 같이 나 뉜 다.
바이트 흐름 과 문자 흐름 의 차이 점:
분류 후 대응 하 는 초 류.
입력 흐름
출력 흐름
바이트 흐름
바이트 입력 흐름 InputStream
바이트 출력 스 트림
문자 흐름
문자 입력 스 트림 리더
문자 출력 스 트림 라이터
주:이 네 가지 유형의 하위 클래스 이름 은 기본적으로 부모 류 명작 을 하위 클래스 이름 으로 하 는 접미사 입 니 다.
바이트 입력 흐름 InputStream:
InputStream
는 모든 바이트 입력 흐름 의 부류 로 추상 적 인 부류 이다.ByteArrayInputStream
,StringBufferInputStream
,FileInputStream
는 세 가지 기본 적 인 미디어 흐름 으로 각각Byte
,StringBuffer
,
에서 데 이 터 를 읽 습 니 다.PipedInputStream
는 다른 스 레 드 와 함께 사용 하 는 파이프 에서 데 이 터 를 읽 습 니 다.ObjectInputStream
와 모든FilterInputStream
의 자 류 는 장식 흐름(장식 기 모델 의 주인공)이다.FileInputStream fis = new FileInputStream("xxx.txt");//
int b;
while((b = fis.read()) != -1) { // fis b b -1
System.out.println(b);
}
fis.close();
바이트 출력 흐름 출력 스 트림:
OutputStream
는 모든 바이트 출력 흐름 의 부류 로 추상 류 이다.ByteArrayOutputStream
,FileOutputStream
는 두 가지 기본 적 인 미디어 흐름 으로 각각Byte
,
에 데 이 터 를 기록 합 니 다.PipedOutputStream
은 다른 스 레 드 와 함께 사용 하 는 파이프 에 데 이 터 를 기록 합 니 다.ObjectOutputStream
와 모든FilterOutputStream
의 자 류 는 장식 흐름 이다.FileOutputStream fos = new FileOutputStream("yyy.txt");
fos.write(100); // int , , 8
fos.write(99); // yyy.txt dc
fos.close();
주의:
1)출력 스 트림 출력 데 이 터 는 출력 스 트림 대상 을 만 들 때 파일 이 존재 하지 않 으 면 만 듭 니 다.존재 하면 이 파일 의 데 이 터 를 비우 고 데 이 터 를 기록 합 니 다.2)파일 에 추가 로 쓰 려 면 new FileOutputStream(String pathName,true)이라는 구조 방법 을 사용 합 니 다.
문자 입력 흐름:
public int read():단일 문 자 를 읽 고 int 로 되 돌려 줍 니 다.스 트림 의 끝 에 도착 하면-1public int read(char[]cbuf)로 돌아 갑 니 다.문 자 를 배열 에 읽 고 읽 은 문자 수 를 되 돌려 줍 니 다.스 트림 의 끝 에 도착 하면-1 로 돌아 갑 니 다.
public static void main(String[] args) throws IOException {
FileReader fr = new FileReader("xxx.txt"); //
int c;
while((c = fr.read()) != -1) { //
System.out.print((char)c); // c char
}
fr.close();
}
문자 출력 흐름:
public void write(int c):단일 문 자 를 기록 합 니 다.public void write(char[]cbuf):문자 배열 을 기록 합 니 다.public abstract void write(char[]cbuf,int off,int len):문자 배열 의 일부분 을 기록 합 니 다.cbuf-문자 배열,off-문자 의 오프셋 을 쓰기 시작 합 니 다.len-쓸 문자 수 입 니 다.public void write(String str):문자열 을 기록 합 니 다.public void write(String str,int off,int len):문자열 의 일부분 을 기록 합 니 다.str-문자열,off-초기 쓰기 문자 의 오프셋 에 비해 len-쓸 문자 수 입 니 다.
노드 흐름:데이터 원본 과 직접 연결 되 어 읽 거나 읽 습 니 다.
자주 사용 하 는 노드 흐름:
InputStream
,OutputStream
,Reader
,Writer
FileInputStream
,FileOutputStrean
,FileReader
,FileWriter
파일 을 처리 하 는 노드 흐름ByteArrayInputStream
,ByteArrayOutputStream
,CharArrayReader
,CharArrayWriter
배열 을 처리 하 는 노드 흐름(대응 하 는 것 은 파일 이 아니 라 메모리 의 한 배열)StringReader
,StringWriter
문자열 을 처리 하 는 노드 흐름PipedInputStream
,PipedOutputStream
,PipedReader
,PipedWriter
파 이 프 를 처리 하 는 노드 흐름상용 처리 흐름:
BufferedInputStrean
,BufferedOutputStream
,BufferedReader
,BufferedWriter
버퍼 기능 을 추가 하여 하 드 디스크 를 자주 읽 지 않도록 합 니 다.InputStreamReader
,OutputStreamReader
바이트 흐름 과 문자 흐름 간 의 전환 을 실현 합 니 다.DataInputStream
,DataOutputStream
등-기본 데이터 형식 을 파일 에 기록 하거나 읽 을 수 있 습 니 다.전환 흐름:
InputStreamReader
,OutputStreamWriter
는InputStream
또는OutputStream
을 매개 변수 로 하여 바이트 에서 문자 흐름 으로 전환 해 야 합 니 다.시퀀스 흐름:시퀀스 흐름 은 여러 바이트 의 입력 흐름 을 하나 로 합성 할 수 있 습 니 다.시퀀스 흐름 에서 데 이 터 를 읽 을 때 통 합 된 첫 번 째 흐름 부터 읽 고 하 나 를 읽 은 후에 두 번 째 것 을 계속 읽 습 니 다.
1)두 개의 입력 흐름 SequenceInputStream(InputStream s1,InputStream s2)을 통합 합 니 다.
public static void demo2() throws FileNotFoundException, IOException {
FileInputStream fis1 = new FileInputStream("a.mp3");
FileInputStream fis2 = new FileInputStream("b.mp3");
SequenceInputStream sis = new SequenceInputStream(fis1, fis2);
FileOutputStream fos = new FileOutputStream("c.mp3");
// ,c.mp3 a.mp3 b.mp3
int b;
while((b = sis.read()) != -1) {
fos.write(b);
}
sis.close(); //sis ,
fos.close();
}
2)여러 입력 스 트림 통합 SequenceInputStream(Enumeration extends InputStream>e)
public static void main(String[] args) throws IOException {
FileInputStream fis1 = new FileInputStream("a.txt");
FileInputStream fis2 = new FileInputStream("b.txt");
FileInputStream fis3 = new FileInputStream("c.txt");
Vector v = new Vector<>(); //
v.add(fis1); //
v.add(fis2);
v.add(fis3);
Enumeration en = v.elements();
SequenceInputStream sis = new SequenceInputStream(en); //
FileOutputStream fos = new FileOutputStream("d.txt");
int b;
while((b = sis.read()) != -1) {
fos.write(b);
}
sis.close();
fos.close();
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.