2016-07-28 45 views
1

我想從Java轉換JPEG中的字節數組。下面的代碼使我的請求錯誤。轉換爲java中的jpeg中的字節

BufferedImage img=Image.read("C:\blabla"); 
WritableRaster raster=img.getRaster(); 
DataBufferByte buffer=(DataBufferByte)raster.getDataBuffer(); 
byte[] jpegbytes=buffer.getData(); 

當我執行它給出錯誤的字節數。 JPEG的磁盤大小爲845.941字節。但是,它在jpegbytes中返回大小2 359 296字節。我怎樣才能糾正字節值?我認爲,BufferedImage課得到錯誤。

+2

Jpeg是壓縮數據。如果您認爲jpeg是「正確的大小」,請獲取文件大小,並且不要將圖像讀取到「BufferedImage」中。 – fabian

+0

你正在使用什麼'Image'類?我在[JDK](https://docs.oracle.com/javase/8/docs/api/java/awt/Image.html) – 4castle

+0

@ 4castle中看不到任何'read'方法,該類爲'javax .imageio.ImageIO',我想OP會犯一個錯字。 – Sam

回答

0

通過將其FileInputStream的內容寫入ByteArrayOutputStream並調用toByteArray(),可以將任何文件寫入字節數組。

public byte[] fileToBytes(String filename) throws IOException { 
    final byte[] buffer = new byte[256]; 
    try (ByteArrayOutputStream out = new ByteArrayOutputStream()) { 
     try (InputStream in = new FileInputStream(new File(filename))) { 
      int bytesRead; 
      while ((bytesRead = in.read(buffer)) > 0) 
       out.write(buffer, 0, bytesRead); 
     } 
     return out.toByteArray(); 
    } 
} 
+0

非常感謝你。 – vahitdurmus