私は通常、次の2つのアプローチを使用して配列に変換Resource
します。byte[]
1-アプローチ
必要なのは、最初getInputStream()
にResource
オブジェクトを呼び出してから、それをconvertStreamToByteArray
次のようなメソッドに渡すことです。
InputStream stream = resource.getInputStream();
long size = resource.getFile().lenght();
byte[] byteArr = convertStreamToByteArray(stream, size);
public byte[] convertStreamToByteArray(InputStream stream, long size) throws IOException {
// check to ensure that file size is not larger than Integer.MAX_VALUE.
if (size > Integer.MAX_VALUE) {
return new byte[0];
}
byte[] buffer = new byte[(int)size];
ByteArrayOutputStream os = new ByteArrayOutputStream();
int line = 0;
// read bytes from stream, and store them in buffer
while ((line = stream.read(buffer)) != -1) {
// Writes bytes from byte array (buffer) into output stream.
os.write(buffer, 0, line);
}
stream.close();
os.flush();
os.close();
return os.toByteArray();
}
2-アプローチ
Konstantin V. Salikhovが示唆したように、そのメソッドを使用org.apache.commons.io.IOUtils
して呼び出し、このようなオブジェクトを渡すことができます...IOUtils.toByteArray(stream)
static
InputStream
byte[] byteArr = IOUtils.toByteArray(stream);
Note -
これについては、内部 toByteArray(...)
でファイルサイズが。より大きくInteger.MAX_VALUE
ないことを確認するためにチェックするので、これをチェックする必要はありません。