2012-03-07 2 views

답변

13

사용되고 볼 이유 byte S

byte[] 

배열. 자바 문자열은 일반적인 바이너리 데이터를위한 좋은 컨테이너가 아니다.

Apache 라이브러리 commons-io에는 바이트 및 스트림을 처리하기위한 유용한 유틸리티 클래스가 있습니다.

IOUtils.toByteArray(InputStream)


ByteBuffer 자바 4 (1.4) 이상 사용할 Java NIO의 일부로서 소개되었다. 특수한 시나리오에서는 byte []를 사용하는 것보다 성능 이점이 있습니다. 또한 도움이되는 편리한 메소드가 있습니다. 하지만 바이트는 일반적으로 널리 쓰이고 API에서 더 많이 사용되며 거의 항상 잘 수행되기 때문에 바이트 []를 사용합니다.

4

는 바이트 배열 (byte [])의 InputStream 또는 (예를 들어,이 InputStream)를 사용하여 그것을 FileInputStream

2

단순화 된 바이트 수준 조작이 필요한 경우 byte[] 또는 ByteBuffer을 사용하십시오.

엄밀히 말하면 일 수 있지만 문자 인코딩과 관련된 함정이 많기 때문에 문자열을 사용하지 말아야합니다.

3

작은 데이터의 경우 byte[]을 사용하지만 이진 파일 (데이터베이스 BLOB에 저장 됨)의 경우 임시 파일을 InputStream으로 사용해야합니다. JavaEE는 업로드 된 파일에 대해서도이 작업을 수행합니다. 서버 성능이 byte []에 대한 메모리를 낭비하는 것은 좋지 않습니다. 각 200MB에 대해 10 개의 PDF 파일을 제공하는 웹 응용 프로그램을 상상해보십시오. 서버는 webapp 용으로 2GB 이상의 RAM이 필요합니다.

또한 InputStream을 사용하면 JDBC가 데이터베이스에 데이터를 스트리밍 할 수 있습니다 (MySql이 아닌 대부분의 JDBC 드라이버의 경우 클라이언트와 서버에 대해 두 번 더 메모리에 데이터를 저장합니다).

Apache Commons FileUploadsetBlob()PreparedStratement입니다.

0

파일을 데이터베이스에 직접 저장하지 마십시오. 대신 파일 시스템에 저장하고 데이터베이스의 파일 경로를 저장하십시오. 그것이 바로 파일 시스템입니다. 바이너리 파일을 데이터베이스에 저장하면 성능 문제가 발생합니다.

관련 문제