I / O 흐름 (자바 가 외부 데이터 와 의 교 류 를 어떻게 실현 하 는 지)

5876 단어 JavaSE
Input / Output: JVM 의 경 계 를 넘 어 외부 데이터 의 원본 이나 목표 데이터 원본 과 데이터 교환 을 하 는 것 을 말한다.
메모: 입 출력 은 JVM 에 대한 것 입 니 다.
File 클래스 (java. io. *) 는 파일 을 표시 할 수도 있 고 디 렉 터 리 일 수도 있 습 니 다. (JAVA 에 서 는 파일 과 디 렉 터 리 가 모두 이 클래스 에 속 하고 구분 이 뚜렷 하지 않 습 니 다.)
자바. io 의 방법 은 디스크 에 있 는 파일 을 디스크 로 조작 하 는 것 이지 만 파일 의 내용 을 읽 을 수 없습니다.
메모: 파일 대상 을 만 드 는 것 과 파일 을 만 드 는 것 은 JAVA 에서 서로 다른 개념 입 니 다.전 자 는 가상 컴퓨터 에서 파일 을 만 들 었 지만 이 를 OS 의 파일 시스템 에 진정 으로 만 들 지 는 않 았 고 가상 컴퓨터 가 꺼 지면 서 만 든 대상 도 사 라 졌 다.파일 을 만 드 는 것 이 시스템 에서 파일 을 만 드 는 것 입 니 다.
File f=new File(“11.txt”);//      11.txt     
f.CreateNewFile(); //
f.CreateMkdir()://
f.delete();//
f.deleteOnExit();// , 。

명령: File f2 = new File ("d: \ \ abc \ \ \ 789 \ \ \ \ \ 1. txt")
이 명령 은 서로 다른 OS 의 파일 시스템 이 매우 다 르 기 때문에 크로스 플랫폼 성 을 갖 추 지 못 한다.
플랫폼 을 뛰 어 넘 으 려 면 file 류 에 separtor () 가 있 고 플랫폼 을 잠 근 파일 구분자 로 되 돌려 줍 니 다.
File.fdir=new File(File.separator);
String str=”abc”+File.separator+”789”;

파일 아래 의 방법 을 사용 할 때 크로스 플랫폼 성 이 있 는 지 주의해 야 합 니 다.
List (): 파일 이름 보이 기 (상대 경로)
ListFiles (): Files 형식 배열 을 되 돌려 줍 니 다. getName () 으로 파일 이름 에 접근 할 수 있 습 니 다.
FileFilter 파일 필터 인터페이스, accept () 방법 을 덮어 씁 니 다.
isDirectory () 와 isFile () 을 사용 하여 파일 인지 디 렉 터 리 인지 판단 합 니 다.
I / O 흐름 을 사용 하여 file 의 내용 에 접근 합 니 다.
JVM 은 외부 와 데이터 채널 을 통 해 데이터 교환 을 한다.
분류:
흐름 에 따라 입력 흐름 과 출력 흐름 으로 나 뉜 다.
전송 단위 에 따라 바이트 흐름 과 문자 흐름 으로 나 뉜 다.
기능 에 따라 노드 흐름 과 여과 흐름 으로 나 눌 수 있다.
노드 흐름: 데이터 원본 과 프로그램 간 의 연결 을 책임 집 니 다.
File,Piped,FileReader,ReandomAccessFile
필터 흐름: 노드 에 기능 을 추가 하 는 데 사용 합 니 다.
여과 흐름 의 구조 방식 은 다른 흐름 매개 변수 구조 (이러한 디자인 모델 을 장식 모델 이 라 고 함) 이다.
바이트 입력 흐름: io 패키지 의 InputStream 은 모든 바이트 입력 흐름 의 부모 클래스 입 니 다.
Int read();한 바이트 읽 기;
new byte [] = 배열 을 먼저 사용 하여 read (byte [] b) 를 호출 할 수 있 습 니 다.
read (byte []) 반환 값 은 유효 수 를 표시 할 수 있 습 니 다.read (byte []) 반환 값 은 - 1 로 끝 을 표시 합 니 다.
바이트 출력 흐름: io 패키지 의 Output Stream 비트 모든 바이트 입력 흐름 의 부모 클래스 입 니 다.
Write 는 입력 흐름 의 read 와 대응 합 니 다.
흐름 중 close () 방법 은 프로그래머 가 제어 합 니 다.입 출력 흐름 이 JVM 의 경 계 를 넘 어 섰 기 때문에 자원 을 회수 할 수 없 을 수도 있 습 니 다.
원칙: 가상 컴퓨터 경 계 를 뛰 어 넘 는 자원 은 프로그래머 가 스스로 닫 아야 하 며 쓰레기 수 거 를 기대 하지 마 세 요.
스 트림 으로 끝 나 는 클래스 는 모두 바이트 흐름 입 니 다.
FileOutputStream 을 구성 하 는 동시에 디스크 에 파일 이 생 성 됩 니 다.만 든 파일 과 디스크 에 있 는 파일 이름 이 바 뀌 면 덮어 쓰기 가 발생 합 니 다.
FileOutputStream 의 boolean 을 사용 하면 추가 상황 을 보고 데 이 터 를 이름 을 바 꾸 는 파일 로 덮어 쓰 거나 입력 내용 을 파일 뒤에 놓 습 니 다.(작성 자 인증)
DataOutput Stream: 데 이 터 를 입력 하 는 형식 입 니 다.
각각 데이터 형식 이 다 르 기 때문에 출력 오류 가 발생 할 수 있 습 니 다.
모든 쌍: DataOutput Stream
DataInputStream
양자 의 입력 순 서 는 반드시 일치 해 야 한다.
필터 흐름:
bufferedOutputStream
bufferedInputStream
노드 흐름 에 버퍼 기능 을 추가 하 는 데 사용 합 니 다.
VM 내부 에 버퍼 를 만 들 고 데 이 터 는 버퍼 에 먼저 기록 하 며 버퍼 의 데이터 가 가득 차 면 한꺼번에 기록 하 는 것 이 효율 적 입 니 다.
버퍼 가 있 는 입 출력 흐름 을 사용 하 는 속도 가 크게 향상 되 고 버퍼 가 클 수록 효율 이 높 습 니 다.(이것 은 전형 적 인 희생 공간 교환 시간 이다)
메모: 버퍼 가 있 는 흐름 을 사용 합 니 다. 데이터 입력 이 완료 되면 flush 방법 으로 버퍼 의 내용 을 외부 데이터 원본 에 한꺼번에 기록 합 니 다.close () 를 사용 해도 같은 효 과 를 얻 을 수 있 습 니 다. close 할 때마다 flush 를 사용 하기 때 문 입 니 다.외부 필터 흐름 을 닫 는 것 에 주의해 야 합 니 다.
(비중 점) 파이프 흐름: 일종 의 노드 흐름 으로 두 라인 에 데 이 터 를 교환 하 는 데 사용 된다.
PipedOutputStream
PipedInputStream
출력 흐름: connect (입력 흐름)
RondomAccessFile 클래스 는 무 작위 로 파일 에 접근 할 수 있 습 니 다.
GetFilepoint () 는 파일 의 포인터 위 치 를 알 수 있 으 며, seek () 로 위 치 를 정할 수 있 습 니 다.
Mode ("r": 무 작위 읽 기; "w": 무 작위 쓰기; "rw": 무 작위 읽 기 쓰기)
연습: 클래스 A, JAVA A file 1 file 2 복사
file 1 요 구 는 시스템 에 존재 하 는 파일 입 니 다.File2 는 아직 존재 하지 않 는 파일 입 니 다.
이 명령 을 실행 하면 file 2 는 file 1 의 내용 입 니 다.
문자 흐름: reader \ write 는 일반 텍스트 파일 만 질 수 있 습 니 다.
FileReader 클래스: 문자 파일 의 출력
바이트 흐름 과 문자 흐름 의 차이: 문자 흐름 응용 이 광범 위 하지 않 습 니 다.
바이트 흐름 의 문자 인 코딩:
문자 인 코딩 은 문 자 를 숫자 로 변환 하여 컴퓨터 에 저장 하고 ASCii 에 따라 알파벳 을 정수 로 표시 합 니 다.
숫자 를 컴퓨터 에서 상응하는 문자 로 바 꾸 는 과정 을 디 코딩 이 라 고 한다.
인 코딩 방식 의 분류:
ASCII (숫자, 영어): 한 글자 가 하나의 바이트 (모든 인 코딩 집합 이 ASCII 와 호 환 됨)
ISO 8859 - 1 (유럽): 한 글자 가 한 바이트 를 차지 합 니 다.
GB - 2312 / GBK: 1 글자 가 두 바이트 를 차지한다
유 니 코드: 한 글자 가 두 바이트 (네트워크 전송 속도 가 느 립 니 다)
UTF - 8: 긴 바이트, 영어 한 바이트, 한자 두 개 또는 세 바이트.
원칙: 디 코딩 방식 의 통일 을 확보 해 야 오류 가 발생 하지 않 습 니 다.
Io 패키지 의 InputStreamread 는 바이트 에서 문자 흐름 으로 흐 르 는 다리 변환 류 라 고 합 니 다.이 종 류 는 문자 변환 방식 을 설정 할 수 있 습 니 다.
Output Streamred: 바이트 까지 문자
Bufferread 에 readline () 이 있어 서 문자 입력 이 더욱 편리 합 니 다.
I / O 흐름 에서 모든 입력 방법 은 차단 방법 입 니 다.
Bufferwrite 는 출력 문자 에 버퍼 를 추가 합 니 다. 방법 이 매우 적기 때문에 부모 클래스 printwriter 를 사용 합 니 다. 바이트 흐름 대상 을 사용 할 수 있 고 방법 도 많 습 니 다.
class ObjectOutputStream 도 필터 흐름 으로 노드 흐름 이 출력 대상 을 직접 가 져 옵 니 다.
가장 유용 한 방법: Write Object (Object b)
스 트림 전송 대상 을 대상 의 직렬 화 라 고 부 르 지만 모든 대상 을 직렬 화 할 수 있 는 것 은 아니다.클래스 를 실현 할 때 만 하나의 인 터 페 이 스 를 실현 해 야 합 니 다: IO 패키지 의 Serializable (직렬 화 가능).이 인 터 페 이 스 는 아무런 방법 이 없다. 이런 인 터 페 이 스 를 태그 인터페이스 라 고 부른다.
Class Student implements Serializable
대상 을 스 트림 을 통 해 영구적 인 미디어 로 정렬 하 는 것 을 대상 의 지속 가능 화 라 고 합 니 다.
하 이 버 네 이 트 는 연구 대상 의 지속 성 이다.
ObuectInputStream  in  =new  ObjectInputStream;
Object o1=in.readObuect();
Student s1=(Student)o1;

메모: o1 은 하나의 대상 이기 때문에 저장 해 야 하기 때 문 입 니 다.
Transient 는 속성 을 수식 하 는 데 쓰 인 다.
Transient int num;
속성 을 직렬 화 할 때 이 속성 을 무시 합 니 다.
모든 속성 은 반드시 서열 화 될 수 있어 야 한다. 특히 일부 속성 자체 도 대상 일 때 이 점 을 특히 주의해 야 한다.
속성 이나 대상 의 직렬 화 여 부 를 판단 합 니 다: Serialver.
Serialver TestObject (TestObject 는 컴 파일 되 어야 합 니 다)
실행 결과: 직렬 화 되 지 않 으 면;서열 화 할 수 없 는 힌트 가 나온다.직렬 화 할 수 있다 면 직렬 화 된 ID: UID 가 나타 납 니 다.
java. until. * 있 습 니 다.
StringTokenizer (매개 변수 1, 매개 변수 2) 는 특정한 기호 에 따라 파일 을 분리 합 니 다.
StringTokenizer (s, ":") 는 ":" 로 문 자 를 구분 하고 s 를 대상 으로 합 니 다.

좋은 웹페이지 즐겨찾기