[Java 실습 #18] InputStream 재사용(3) - InputStream 재사용 class 활용
1. InputStream 재사용 class 생성하여 호출 - ByteArray에 저장하여 데이터를 재사용
2. 개발환경
2.1. 개발환경
2.2. 라이브러리
3. 구현
3.1. 프로젝트 구조
3.2. 파일 - 텍스트 파일
3.3. 구현 - 소스코드
4. 결과
1. InputStream 재사용 class 생성하여 호출 - ByteArray에 저장하여 데이터를 재사용
저장한 byte array를 InputStream으로 받을 수 있는 InputStream을 상속받은 class를 생성하여 데이터를 재사용
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.io.home.test;
public class InputStreamToByteArray {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
|
3.3. 구현 - 소스코드
[ CachedInputStream.java ] - byte array를 저장하여 넘겨줄 class
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
|
package io.home.test.cache;
import io.home.test.CacheInputStreamToByteArray;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
public class CacheInputStream {
private static final String USER_DATA_PATH = "resource";
private static final String USER_DATA_FILE_NAME = "sample-data.txt";
private byte[] bytes;
public CacheInputStream() {
readUserData();
}
private void readUserData() {
String filePath = "/" + USER_DATA_PATH + "/" + USER_DATA_FILE_NAME;
try (InputStream is = CacheInputStreamToByteArray.class.getResourceAsStream(filePath)) {
if (is == null) throw new RuntimeException("No data in " + filePath);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
for (int len = is.read(buffer); len != -1; len = is.read(buffer)) {
baos.write(buffer, 0, len);
}
baos.flush();
bytes = baostoByteArray();
} catch (IOException ioe) {
}
}
public byte[] getBytes() {
return bytes;
}
public InputStream getInputStream() {
return new CachedByteArrayInputStream(this.bytes);
}
}
|
[ CachedByteArrayInputStream.java ] - byte array를 ByteArrayInputStream으로 변환하는 InputStream 하위 class
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
package io.home.test.cache;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
public class CachedByteArrayInputStream extends InputStream {
private ByteArrayInputStream in;
public CachedByteArrayInputStream(byte[] bytes) {
this.in = new ByteArrayInputStream(bytes);
}
public int read() {
return in.read();
}
}
|
[ TestCachedObjects.java ]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
package io.home.test.cache;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.util.stream.Collectors;
public class TestCachedObjects {
public static void main(String[] args) {
CacheInputStream cachedInputStream = new CacheInputStream();
InputStream is = cachedInputStream.getInputStream();
String s = new String(cachedInputStream.getBytes(), StandardCharsets.UTF_8);
System.out.println(s);
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String result = br.lines().collect(Collectors.joining("\n"));
System.out.println(result);
}
}
|
4. 결과
byte array를 InputStream으로 변환하여 반환하는 class 생성하여 활용 가능
일정 용량 이하의 텍스트 데이터에만 활용 - byte array를 복사하여 반환하므로 효율성은 의문
'JAVA 자바 > JAVA 실습' 카테고리의 다른 글
[Java 실습 #25] 간단한 Http 호출 - HttpURLConnection 활용 (0) | 2022.08.12 |
---|---|
[Java 실습 #24] 해당 class의 jar 파일 경로 추출 (0) | 2022.07.29 |
[Java 실습 #18] InputStream 재사용 (2) - ByteArray에 저장하여 사용 (0) | 2021.12.29 |
[Java 실습 #18] InputStream 재사용 (1) - mark, reset 활용 (0) | 2021.12.29 |
[Java 실습 #17] InputStream을 ByteArray로 변환 (0) | 2021.12.29 |