source

바이트 []에서 InputStream 또는 OutputStream으로

gigabyte 2022. 9. 6. 22:21
반응형

바이트 []에서 InputStream 또는 OutputStream으로

데이터베이스 테이블에 BLOB 열이 있으며 이 컬럼을 사용해야 합니다.byte[]매핑으로 자바 프로그램에서 이 데이터를 사용하기 위해 변환해야 합니다.InputStream또는OutputStream하지만 그렇게 하면 내부에서 무슨 일이 일어나는지 모르겠어요.내가 이 전환을 했을 때 무슨 일이 벌어지는지 누가 간략하게 설명해 줄 수 있나요?

다음과 같이 바이트 배열 I/O 스트림을 생성하고 사용합니다.

byte[] source = ...;
ByteArrayInputStream bis = new ByteArrayInputStream(source);
// read bytes from bis ...

ByteArrayOutputStream bos = new ByteArrayOutputStream();
// write bytes to bos ...
byte[] sink = bos.toByteArray();

표준 JDBC Blob 인터페이스를 실장하는 JDBC 드라이버를 사용하고 있는 경우(전부는 아님),InputStream또는OutputStream를 사용하여 BLOB에getBinaryStream그리고.setBinaryStream메서드1 및 바이트를 직접 가져오고 설정할 수도 있습니다.

(일반적으로 모든 예외를 처리하고 스트림을 닫으려면 적절한 절차를 수행해야 합니다.단, 클로징bis그리고.bos위의 예에서는 파일 기술자, 소켓, 데이터베이스 연결 등 외부 리소스와 연결되어 있지 않기 때문에 불필요합니다.)

1 - 그setBinaryStream메서드는 정말 getter입니다.어림짐작하다.

「용도」는 「읽기」를 의미한다고 생각됩니다만, 리드 케이스에 대해 설명하는 것은, 기본적으로 기입 케이스에 대해서는 번복할 수 있습니다.

따라서 바이트[]로 끝납니다.이것은 특별한 유형의 변환(문자, 암호화 등)이 필요한 모든 종류의 데이터를 나타낼 수 있습니다.이 데이터를 파일에 그대로 쓰고 싶다고 가정해 봅시다.

ByteArrayInputStream은 기본적으로 바이트를 순서대로 공급하는 메커니즘입니다.

그런 다음 만들 파일의 FileOutputStream을 생성할 수 있습니다.다양한 데이터 소스 및 대상에 대한 InputStreams 및 OutputStreams에는 다양한 유형이 있습니다.

마지막으로 InputStream을 OutputStream에 씁니다.이 경우 바이트 배열은 쓰기 위해 FileOutputStream으로 순차적으로 전송됩니다.이를 위해 IOTils 사용을 권장합니다.

byte[] bytes = ...;//
ByteArrayInputStream in = new ByteArrayInputStream(bytes);
FileOutputStream out = new FileOutputStream(new File(...));
IOUtils.copy(in, out);
IOUtils.closeQuietly(in);
IOUtils.closeQuietly(out);

반대로

FileInputStream in = new FileInputStream(new File(...));
ByteArrayOutputStream out = new ByteArrayOutputStream();
IOUtils.copy(in, out);
IOUtils.closeQuietly(in);
IOUtils.closeQuietly(out);
byte[] bytes = out.toByteArray();

위의 코드 스니펫을 사용하는 경우 예외를 처리해야 하며, 최종 블록에서 '스니펫'을 수행할 것을 권장합니다.

ByteArrayInputStream을 사용하여 byte[] 어레이를 입력 스트림으로 변환할 수 있습니다.

String str = "Welcome to awesome Java World";
    byte[] content = str.getBytes();
    int size = content.length;
    InputStream is = null;
    byte[] b = new byte[size];
    is = new ByteArrayInputStream(content);

완전한 예에 대해서는, http://www.onlinecodegeek.com/2015/09/how-to-convert-byte-into-inputstream.html 를 참조해 주세요.

InputStream/OutputStream과 해당 바이트 간의 변환은 이루어지지 않습니다.바이너리 데이터용으로 작성되어 있는 대로 바이트를 1개씩 읽거나 쓸 수 있습니다.

바이트에서 문자로 변환하려면 변환이 필요합니다.그런 다음 문자 집합을 사용하여 변환해야 합니다.이 문제는 문자 데이터에 대해 만들어진 바이트에서 문자열 또는 판독기를 만들 때 발생합니다.

output = new ByteArrayOutputStream();
...
input = new ByteArrayInputStream( output.toByteArray() )

나는 이 질문에 대한 나의 대답이 매우 늦었다는 것을 깨달았지만, 나는 지역사회가 이 문제에 대한 새로운 접근을 원할 것이라고 생각한다.

byte[] data = dbEntity.getBlobData();
response.getOutputStream().write();

응답 오브젝트에 이미 Output Stream이 있기 때문에 이 방법이 더 좋다고 생각합니다.새로운 Output Stream을 생성할 필요가 없습니다.

언급URL : https://stackoverflow.com/questions/2091454/byte-to-inputstream-or-outputstream

반응형