바이트 []에서 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
'source' 카테고리의 다른 글
서버에서 보낸 이벤트 및 php - 서버에서 이벤트를 트리거하는 항목은 무엇입니까? (0) | 2022.09.08 |
---|---|
CSV 파일을 MySQL 테이블로 Import하는 방법 (0) | 2022.09.08 |
$_SERVER[``를 사용 가능HTTP_X_REQUESTED_WITH']가 PHP에 존재합니까? (0) | 2022.09.06 |
Python에서 RGB 이미지를 그레이스케일로 변환하려면 어떻게 해야 하나요? (0) | 2022.09.06 |
현재 페이지의 Vuex 레코드를 삭제할 때 네비게이션을 처리하는 방법 (0) | 2022.09.06 |