반응형

[Java 실습 #18] InputStream 재사용 (2) - ByteArray에 저장하여 사용

 

1. ByteArray에 저장하여 데이터를 재사용

2. 개발환경

    2.1. 개발환경

    2.2. 라이브러리

3. 구현

    3.1. 프로젝트 구조

    3.2. 파일 - 텍스트 파일

    3.3. 구현 - 소스코드

4. 결과

 

 

1. ByteArray에 저장하여 데이터를 재사용

InputStream을 byte array로 변환하여 데이터를 재사용

 

 

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. 구현 - 소스코드

[ CacheInputStreamToByteArray.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
package io.home.test;
 
import java.io.*;
import java.util.stream.Collectors;
 
public class CacheInputStreamToByteArray {
    private static final String USER_DATA_PATH = "resource";
    private static final String USER_DATA_FILE_NAME = "sample-data.txt";
 
    private byte[] bytes;
 
    private void readUserData() {
        String filePath = "/" + USER_DATA_PATH + "/" + USER_DATA_FILE_NAME;
        try (InputStream is = CacheInputStreamToByteArray.class.getResourceAsStream(filePath)) {
            if (is == nullthrow 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 = baos.toByteArray();
        } catch (IOException ioe) {
        }
    }
 
    public static void main(String[] args) {
        CacheInputStreamToByteArray cacheToByteArray = new CacheInputStreamToByteArray();
        cacheToByteArray.readUserData();
 
        InputStream is1 = new ByteArrayInputStream(cacheToByteArray.bytes);
        BufferedReader br1 = new BufferedReader(new InputStreamReader(is1));
        String result1 = br1.lines().collect(Collectors.joining("\n"));
        System.out.println(result1);
        System.out.println("\n\n");
 
        InputStream is2 = new ByteArrayInputStream(cacheToByteArray.bytes);
        BufferedReader br2 = new BufferedReader(new InputStreamReader(is2));
        String result2 = br2.lines().collect(Collectors.joining("\n"));
        System.out.println(result2);
    }
 
}

 

 

4. 결과

 

  • InputStream의 byte array로 변환하여 저장하고 해당 byte array를 재사용하는 방법
  • InputStream의 데이터에 따라 caching 여부 결정 필요

 

반응형