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();
}
}
}
어디까지나 예시를 보고 어떻게 사용하는건 본인의 몫인듯 하다.
댓글