내 데이터베이스 테이블에 BLOB 열이 있습니다. 내 Java 프로그램에 byte[]
을 매핑으로 사용하고이 데이터를 InputStream
또는 OutputStream
으로 변환해야합니다. 그러나 그렇게 할 때 내부적으로 어떤 일이 발생하는지 알지 못합니다. 이 변환을 할 때 일어나는 일에 대해 간단히 설명 할 수 있습니까?Byte [] to 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 interface (안 모두 않음), 당신은 도에 연결할 수 있습니다 구현하는 JDBC 드라이버를 사용한다고 가정하면 getBinaryStream
및 setBinaryStream
방법 을 사용하여 blob에 또는 OutputStream
을 입력하고 직접 바이트를 가져오고 설정할 수도 있습니다.
(일반적으로 예외를 처리하고 스트림을 닫으려면 적절한 조치를 취해야합니다. 그러나 위의 예에서 bis
및 bos
을 닫는 것은 외부 리소스와 관련이 없으므로 불필요합니다. 예 : 파일 설명자, 소켓, 데이터베이스 연결).
1 - setBinaryStream
메서드는 실제로 getter입니다. 그림을 이동.
좋은 .. 매우 도움이 –
InputStream/OutputStream과 작업중인 바이트 사이에는 변환이 없습니다. 그것들은 바이너리 데이터를 위해 만들어지고 바이트를 하나씩 읽는다.
byte에서 char로 이동하려면 변환이 필요합니다. 그런 다음 문자 집합을 사용하여 변환해야합니다. 이것은 문자 데이터 용으로 만들어진 바이트에서 String 또는 Reader를 만들 때 발생합니다.
+1 - 나는 그 질문에 그 부분에 대답하려고했는데, 하지만 바빴어 :-) –
'사용'은 읽음을 의미한다고 가정하고 있지만, 읽은 경우에 대해 설명 할 내용은 기본적으로 쓰기 경우에 대해 되돌릴 수 있습니다.
그래서 바이트 []로 끝납니다. 이것은 특수한 유형의 변환 (문자, 암호화 등)이 필요한 모든 종류의 데이터를 나타낼 수 있습니다. 이 데이터를 그대로 파일에 쓰고 싶다.
기본적으로 ByteArrayInputStream을 만들 수 있습니다. 이것은 기본적으로 순서대로 바이트에 공급하는 메커니즘입니다.
그러면 만들려는 파일에 대해 FileOutputStream을 만들 수 있습니다. 다른 데이터 소스 및 대상에 대해 다양한 유형의 InputStream 및 OutputStream이 있습니다.
마지막으로 InputStream을 OutputStream에 씁니다. 이 경우, 바이트 배열은 쓰기 위해 FileOutputStream에 차례로 전송됩니다. 이를 위해 나는 IOUtils
byte[] bytes = ...;//
ByteArrayInputStream in = new ByteArrayInputStream(bytes);
FileOutputStream out = new FileOutputStream(new File(...));
IOUtils.copy(in, out);
IOUtils.closeQuietly(in);
IOUtils.closeQuietly(out);
과에서를 사용하는 것이 좋습니다 위의 코드 조각을 사용하는 경우는 예외를 처리해야하고 난 당신이 (가) finally 블록에 '종료'않는 것이 좋습니다
FileInputStream in = new FileInputStream(new File(...));
ByteArrayOutputStream out = new ByteArrayOutputStream();
IOUtils.copy(in, out);
IOUtils.closeQuietly(in);
IOUtils.closeQuietly(out);
byte[] bytes = out.toByteArray();
역 .
나는 내 대답이이 질문에 대해 늦다는 것을 알고 있지만 지역 사회가 a newer approach to this issue을 좋아할 것이라고 생각합니다.
원형 버퍼는 OP 문제를 해결하지 못합니다. 서면으로 작성된 질문에서 OP는 * 전체 * 내용을 단일 바이트 배열로 필요로합니다. –
byte[] data = dbEntity.getBlobData();
response.getOutputStream().write();
응답 개체에 이미 기존 OutputStream이 있으므로이 방법이 더 좋습니다. 새 OutputStream을 만들 필요가 없습니다.
우리는 제목 바이트의 배열 "해야하지 여기 http://www.onlinecodegeek.com/2015/09/how-to-convert-byte-into-inputstream.html
output = new ByteArrayOutputStream();
...
input = new ByteArrayInputStream(output.toByteArray())
- 1. 자바 프로젝트 모듈 - InputStream/OutputStream 또는 .tmpFile/byte [] 사용
- 2. Java : OutputStream 및 InputStream
- 3. 라이터 또는 OutputStream?
- 4. Byte [] to String to Byte [] - 어떻게 할 것인가?
- 5. OLEVariant to .Net byte []
- 6. Varbinary text to byte []
- 7. InputStream 또는 InputStreamReader를 버퍼링해야합니까?
- 8. vb.net byte [] to C++ char *
- 9. byte 또는 int를 사용해야합니까?
- 10. OutputStream 관련 문제
- 11. 이미지 byte []를 파일로 변환합니다.
- 12. python과 동등한 java OutputStream?
- 13. PrintWriter 및 OutputStream 사용
- 14. icon to byte [] C# compact framework
- 15. String to byte [] 그리고 그 반대로?
- 16. InputStream 전에 FileSize 받기
- 17. UTF-8로 InputStream 읽기
- 18. VARCHAR2 (n 개의 BYTE | CHAR) 기본 -> CHAR 또는 BYTE
- 19. HttpURLConnection 읽기 InputStream - 수동 버퍼 또는 BufferedInputStream?
- 20. ByteArrayOutputStream이 쓰여지지 않은 OutputStream
- 21. OutputStream 가져 오는 방법
- 22. Java InputStream! = Readable
- 23. Java의 InputStream
- 24. 폐쇄에는 InputStream
- 25. InputStream 처리
- 26. android socket connection, inputStream with socket.io 또는 node websocket 서버
- 27. PrintWriter 및 byte [] 문제
- 28. ImageIO : jif to jpeg 문제 -> 이미지가 핑크색이 됨
- 29. 안전하게 InputStream 읽기를 취소 하시겠습니까?
- 30. 자바의 InputStream 인코딩/캐릭터 세트
확인하세요 전체 예를 들어이 InputStream
를 사용하여 입력 스트림에 바이트 [] 배열을 변환 할 수 있습니다 ... "또는"바이트 배열 ... "또는"바이트 [] ... ""바이트 배열 ... "instaed? – kuester2000
여기에 반대를 참조하십시오 : http://stackoverflow.com/questions/1264709/convert-inputstream-to-byte-in-java –