반응형
[Java 실습 #18] InputStream 재사용 (1) - mark, reset 활용
1. java.io.InputStream의 mark, reset 설정으로 InputStream 재사용
2. 개발환경
2.1. 개발환경
2.2. 라이브러리
3. 구현
3.1. 프로젝트 구조
3.2. 파일 - 텍스트 파일
3.3. 구현 - 소스코드
4. 결과
1. java.io.InputStream의 mark, reset 설정으로 InputStream 재사용
InputStream의 read() 관련 호출은 InputStream을 한번만 읽을 수 있다.
InputStream의 mark, reset의 pointer 설정을 통해 InputStream 재사용 가능
2. 개발환경
2.1. 개발환경
MacOS M1 - macOS Monterey 12.0.1
IntelliJ IDEA 2021.2 (Community Edition)
2.2. 라이브러리
JDK 1.8
3. 구현
3.1. 프로젝트 구조
3.2. 파일 - 텍스트
[ sample-data.txt ]
1
2
3
4
5
6
7
|
package io.home.test;
public class InputStreamToByteArray {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
|
3.3. 구현 - 소스코드
[ MarkAndResetInputStream.java ]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
package io.home.test;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.stream.Collectors;
public class MarkAndResetInputStream {
private static final String USER_DATA_PATH = "resource";
private static final String USER_DATA_FILE_NAME = "sample-data.txt";
private void readUserData() {
String filePath = "/" + USER_DATA_PATH + "/" + USER_DATA_FILE_NAME;
InputStream is = MarkAndResetInputStream.class.getResourceAsStream(filePath);
if (is == null) throw new RuntimeException("No data in " + filePath);
is.mark(0);
readInputStreamLine(is);
System.out.println("\n\n");
try {
is.reset();
} catch (IOException ioe) {
}
readInputStreamLine(is);
System.out.println("\n\n");
try {
is.reset();
} catch (IOException ioe) {
}
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String result = br.lines().collect(Collectors.joining("\n"));
System.out.println(result);
System.out.println("\n\n");
readInputStreamLine(is);
System.out.println("\n\n");
try {
is.close();
} catch (IOException ioe) {
System.out.println("close InputStream failed...");
}
}
private String readAllLines(InputStream is) {
String result;
BufferedReader br = new BufferedReader(new InputStreamReader(is));
result = br.lines().collect(Collectors.joining("\n"));
return result;
}
private void readInputStreamLine(InputStream is) {
int increment = 0;
try {
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String line;
while ((line = br.readLine()) != null) {
increment++;
// System.out.println(line);
}
} catch (IOException ioe) {
}
System.out.println("Read " + increment + " lines...");
}
public static void main(String[] args) {
MarkAndResetInputStream markAndResetInputStream = new MarkAndResetInputStream();
markAndResetInputStream.readUserData();
}
}
|
4. 결과
reset() 하지 않은 경우 InputStream을 읽을 수 없다.
반응형
'JAVA 자바 > JAVA 실습' 카테고리의 다른 글
[Java 실습 #18] InputStream 재사용 (3) - InputStream 재사용 class 활용 (0) | 2022.01.03 |
---|---|
[Java 실습 #18] InputStream 재사용 (2) - ByteArray에 저장하여 사용 (0) | 2021.12.29 |
[Java 실습 #17] InputStream을 ByteArray로 변환 (0) | 2021.12.29 |
[Java 실습 #16] 마지막 구분자 뒤의 문자열 추출 (0) | 2021.12.26 |
[Java 실습 #15] 배열 출력하기 (0) | 2021.12.26 |