콘텐츠로 건너뛰기

[Programming][java] BufferedInputStream + eclipse 인코딩 설정

답글 남기기

java BufferedInputStream은 컴퓨터의 각 부품 별 성능 격차에 따른 처리 속도 저하를 줄이기 위해서 사용되며, 기존의 처리 방식인 프로그램이 입출력 소스와 직접 작업하는 방법과 달리 중간에 메모리 버퍼와 함께 작업을 진행해 처리 시간을 단축시킬 수 있다.

  • 예제 1 – 스트림 데이터 출력
import java.io.BufferedInputStream;
import java.io.FileInputStream;

public class example2 {

	public static void main(String[] args) {

		try {
			FileInputStream fis = new FileInputStream("c:/temp/test.txt");

			BufferedInputStream bis = new BufferedInputStream(fis);

			byte[] byteBuff = new byte[9999];

			int nRLen = bis.read(byteBuff);

			String strBuff = new String(byteBuff, 0, nRLen);

			System.out.printf("읽은 바이트수[%d] : \n읽은 내용 %s \n", nRLen, strBuff);

			bis.close();
			fis.close();

		} catch (Exception e) {
			System.out.println("파일이 없습니다!.\n");
			System.out.println("c:/temp/test.txt\n");
		}

	}

}

실행 결과

실행 결과 글자가 깨지긴 했어도 잘 읽어온 것을 확인할 수 있다.

스트림은 입력 소스로부터 자신의 내부 버퍼 크기만큼 데이터를 먼저 읽고 버퍼에 저장한다.

생성자 매개값으로 준 입력 스트림과 연결되어 8918 내부 버퍼 사이즈를 갖는다.

BufferedInputStream bis = new BufferedInputStream(“C:/temp/test.PNG”) 예제로 보여줄 이미지의 바이트 스트림은 8918을 넘지 않는다.

  • 예제 2 – 이미지를 읽는데 걸리는 시간 비교

import java.io.BufferedInputStream;

import java.io.FileInputStream;



public class BufferdInputStreamDefault {
	public static void main(String[] args) throws Exception{
		long start = 0;
		long end = 0;

		FileInputStream fis1 = new FileInputStream("C:/temp/test.PNG");
		start = System.currentTimeMillis();
		while(fis1.read() != -1) {}
		end = System.currentTimeMillis();
		System.out.println("BufferdInputStream을 사용하지 않았을 때 걸린 시간: " + (end-start) + "ms");
		fis1.close();

		FileInputStream fis2 = new FileInputStream("C:/temp/test.PNG");
		BufferedInputStream bis = new BufferedInputStream(fis2);
		start = System.currentTimeMillis();
		while(bis.read() != -1) {}
		end = System.currentTimeMillis();
		System.out.println("BufferdInputStream을 사용했을 때 걸린 시간 : " + (end-start) + "ms");
		bis.close();
		fis2.close();
	}
}

실행 결과

BufferInputStream을 사용했을 시 사용하지 않은 경우보다 60배 정도의 읽기 속도 차이를 보여준다. 생각보다 많다..


크기가 큰 데이터 스트림을 추가하게 된다면?

9.5GB ISO 파일을 추가했을 시 스트림 값을 읽어오지 못했다.


+ eclipse 인코딩 설정 방법

1. 상단 [Windows] -> [Preferences] -> [General] -> [Content Type] -> [Java Class File] -> 하단 Deault encoding “UTF-8” 입력 -> [Update] -> [OK]

2. [General] -> [Workspace] -> [Text file encoding] -> [Other”UTF-8″] 선택 -> [OK]

3. [General] -> [Editors] -> [Spelling] -> [Encoding”UTF-8 선택”] -> [OK]

4. [Web] -> [CSS File] -> [Encoding “ISO 10646/Unicode(UTF-8) 선택”] -> [OK]

5. [Web] -> [HTML Files] -> [Encoding “ISO 10646/Unicode(UTF-8) 선택”] -> [OK]

6. [Web] -> [JSP File] -> [Encoding “ISO 10646/Unicode(UTF-8) 선택”] -> [OK]

7. [XML] -> [XML Files] -> [Encoding “ISO 10646/Unicode(UTF-8) 선택”] -> [OK]

아까 보이지 않았던 글씨가 표시된다.

출처 : https://altongmon.tistory.com/274