본문 바로가기
Language/Java

[JAVA] Java에서 InputStream 변환 Byte Array ByteBuffer

by 하늘둥둥 2021. 8. 26.

java로 파일전송을 하거나 파일을 다루게 되는 경우 Stream을 Byte로 바꿔서 다뤄줘야 하는 경우에 사용하게 된다.

 

 

1. Byte Array 로 변경하는 방법

InputStream is = new ByteArrayInputStream(new byte[] { 0, 1, 2 });

byte[] targetArray = new byte[is.available()];

is.read(targetArray);
InputStream is =new ByteArrayInputStream(newbyte[] { 0, 1, 2, 3, 4, 5, 6 }); // not really known
ByteArrayOutputStream buffer =new ByteArrayOutputStream();

int nRead;
byte[] data =newbyte[4];
while ((nRead = is.read(data, 0, data.length)) != -1) {
	buffer.write(data, 0, nRead);
}

buffer.flush();
byte[] targetArray = buffer.toByteArray();

2. ByteBuffer 로 변경하는 방법

byte[] input =newbyte[] { 0, 1, 2 };

InputStream initialStream =new ByteArrayInputStream(input);
ByteBuffer byteBuffer = ByteBuffer.allocate(3);

while (initialStream.available() > 0) {
	byteBuffer.put((byte) initialStream.read());
}
assertEquals(byteBuffer.position(), input.length);

출처 : https://www.baeldung.com/convert-input-stream-to-array-of-bytes

 

 

실제 위의 예시를 보고 변형하여 사용한 HTTP 통신으로 파일을 받고 저장하는 모듈을 만드는데 사용했다.

public class Handler implements HttpHandler  {
		
	@Override
	public void handle(final HttpExchange exchange) throws IOException {
			
			
		String fileName = exchange.getRequestHeaders().getFirst("uploaded_file");
		String fileType = exchange.getRequestHeaders().getFirst("uploaded_file_type");
		String savePath = "C:/Users/example";
	
			
		DataInputStream di = null;
		FileOutputStream os = null;
		ByteArrayOutputStream buf  = null;
			
		try {
						
			di = new DataInputStream(exchange.getRequestBody());
				
			if("".equals(fileName) || fileName == null) { // 텍스트
					
				int readBuffer = 0;
				byte [] buffer = new byte[512];
					
				buf = new ByteArrayOutputStream();
					
				while((readBuffer = di.read(buffer)) != -1) {
					buf.write(buffer, 0, readBuffer);
				}
				buf.flush();
					
				byte [] textBuffer  = buf.toByteArray(); 
				System.out.println("TEXT buffer to String " + new String (textBuffer,"UTF-8"));
					
				//TODO
				// new String (textBuffer,"UTF-8") --> DB로 저장
					
				buf.close();
				
			}else {
				int readBuffer = 0;
				byte [] buffer = new byte[512];
					
				os = new FileOutputStream(new File(savePath, fileName+"."+fileType));
					
				while((readBuffer = di.read(buffer)) != -1) {			
					os.write(buffer,0,readBuffer);
				}
					
				//saveFileName--> DB로 저장
					
			}
				
			exchange.getResponseHeaders().add("Content-type", "text/plain");
			exchange.sendResponseHeaders(200, 0);
			OutputStream responesOs = exchange.getResponseBody();               
			responesOs.write("success".getBytes());
			responesOs.close();
			os.close();
			di.close();
            
			System.out.println("FileHandler File Upload Succ : " + fileName);    
		} catch (Exception e) {
			e.printStackTrace();
			if(os != null) os.close();
			if(di != null) di.close();
			System.out.println("FileHandler Error : " + e.getMessage());
		} finally {
			if(os != null) os.close();
			if(di != null) di.close();
			exchange.close();
		}
	}
}

 

어디까지나 예시를 보고 어떻게 사용하는건 본인의 몫인듯 하다.

 

 

 

 

 

댓글