자바 고 효율 파일 스 트림 읽 기 쓰기 작업 상세 설명
나중에 잊 어 버 리 지 않도록 파일 흐름 의 성능 대 비 를 기록 하 세 요.
보통 파일 읽 기와 쓰기 작업 을 자주 합 니 다.자바 에 서 는 많은 작업 파일 의 종 류 를 제공 합 니 다.일반적으로 파일 작업 도 스 트림 작업 이 라 고 하 는데 다음 과 같은 방식 으로 분류 할 수 있 습 니 다.
4.567917.기능 에 따라 바이트 흐름 과 문자 흐름4.567917.노드 흐름 과 여과 흐름 에 따라 노드 흐름 은 파일 을 직접 조작 하고 여과 흐름 은 노드 흐름 과 여과 흐름 을 포장 했다.예 를 들 어 FileInputStream 과 Buffered FileInputStream 은 각각 노드 흐름 과 여과 흐름 이다파일 흐름 비교
다음은 우리 가 자주 사용 하 는 몇 가지 흐름 을 중점적으로 비교 해 보 겠 습 니 다.
(1) DataInputStream+FileInputStream
(2) DataInputStream+BufferedInputStream
(3)BufferedReader+FileReader(버퍼 크기 에 따라 성능 이 다 릅 니 다.예 를 들 어 1K 와 8K)
(4) BufferedFileReader
먼저 결론 을 붙인다.
소모 시간 대비:
(4)우(3)―8096 우(3)-1024 우(2)<(1)
또한 Buffered FileReader 가 파일 을 읽 는 모든 줄 의 내용 을 최적화 할 수 있다 면 전통 적 인 코드 는 다음 과 같다.
BufferedFileReader in = new BufferedFileReader();
for (int i=0; i < nargs; i++) {
try {
in.open(args[i]);
while ((line = in.readLine()) != null) {
nlines++;
} in.close();
} catch (Exception e) {
System.out.println(" BFRTest: exception:" + e );
}
코드 의 다섯 번 째 줄 에서 Buffered Reader 는 먼저 StringBuffer 를 만 든 다음 에 하나의 String 으로 돌아 갑 니 다.여 기 는 두 번 의 문자 복사 와 관련 됩 니 다.10000 줄 을 읽는다 고 가정 하면 10000 개의 임시 String 대상 이 생 성 되 고 메모리 가 많이 소 모 됩 니 다.Buffered Reader 의 버퍼 흐름 은 개인 적 인 것 이기 때문에 버퍼 흐름 을 스스로 관리 할 수 있 습 니 다.파일 을 읽 는 가장 좋 은 방법 코드 는 다음 과 같 습 니 다.
FileReader fr;
int nlines = 0;
char buffer[] = new char[8192 + 1];
int maxLineLength = 128;
//assumes no line is longer than this
char lineBuf[] = new char[maxLineLength];
for (int i = 0; i < nargs; i++) {
try {
fr = new FileReader(args[i]);
int nChars = 0;
int nextChar = 0;
int startChar = 0;
boolean eol = false;
int lineLength = 0;
char c = 0;
int n;
int j;
while (true) {
if (nextChar >= nChars) {
n = fr.read(buffer, 0, 8192);
if (n == -1) { // EOF
break;
}
nChars = n;
startChar = 0;
nextChar = 0;
}
for (j = nextChar; j < nChars; j++) {
c = buffer[j];
if ((c == '
') || (c == '\r')) {
eol = true;
break;
}
}
nextChar = j;
int len = nextChar - startChar;
if (eol) {
nextChar++;
if ((lineLength + len) > maxLineLength) {
// error
} else {
System.arraycopy(buffer, startChar, lineBuf, lineLength, len);
}
lineLength += len;
//
// Process line here
//
nlines++;
if (c == '\r') {
if (nextChar >= nChars) {
n = fr.read(buffer, 0, 8192);
if (n != -1) {
nextChar = 0;
nChars = n;
}
}
if ((nextChar < nChars) && (buffer[nextChar] == '
'))
nextChar++;
}
startChar = nextChar;
lineLength = 0;
continue;
}
if ((lineLength + len) > maxLineLength) {
// error
} else {
System.arraycopy(buffer, startChar, lineBuf, lineLength, len);
}
lineLength += len;
}
fr.close();
} catch (Exception e) {
System.out.println("exception: " + e);
}
NIO 파일 흐름FileChanel 소개
통 로 는 이전 흐름 이 단 방향 이 고 통 로 는 양 방향 이 며 읽 을 수도 있 고 쓸 수도 있다.파일 읽 기 효율
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.