2014-06-26 144 views
1

如果我有一個包含我想要的確切byte[]數據文件:讀取字節值在文件轉換成字節數組

[-119, 45, 67, ...] 

我怎麼能讀取這些值轉換爲byte陣列?是否必須將它們作爲String讀取,然後將這些String值轉換爲byte值?

這是目前我在做什麼,和它的作品,但慢慢地:

BufferedReader reader = null; 
    String mLine = null; 
    AssetManager assetManager = CustomApplication.getCustomAppContext().getAssets(); 

    try { 
     reader = new BufferedReader(new InputStreamReader(assetManager.open(fileName))); 
     mLine = reader.readLine(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } finally { 
     if (reader != null) { 
      try { 
       reader.close(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 

    String[] byteValues = mLine.substring(1, mLine.length() - 1).split(","); 
    byte[] imageBytes = new byte[byteValues.length]; 

    for (int i = 0; i < imageBytes.length; i++) { 
     imageBytes[i] = Byte.valueOf(byteValues[i].trim()); 
    } 

    return imageBytes; 

UPDATE:似乎有是什麼,我想完成一個誤區。我的文件包含我想要的最終字節數組中的EXACT字節數據。例如,我想將文件轉換與準確

[-119, 45, 67, ...] 

byte[]稱爲結果與

result[0] = -119 
result[1] = 45 
result[2] = 67 

回答

2

BufferedReader用於讀取char單位。使用BufferedInputStream讀取byte單位和使用ByteArrayOutputStream來幫助您填寫的字節數組:

BufferedInputStream bis = new BufferedInputStream(assetManager.open(fileName)); 
ByteArrayOutputStream buffer = new ByteArrayOutputStream(); 

int theByte; 

while((theByte = bis.read()) != -1) 
{ 
    buffer.write(theByte); 
} 

bis.close(); 
buffer.close(); 

byte[] result = buffer.toByteArray(); 
+0

讀一個字節整個文件陸續真的不好,很慢的練習。 –

+0

這不起作用。當以字符串形式顯示時,我的緩衝區將包含正確的值[[-119,45,67,...]',但在'toByteArray()'後面,結果包含'[91,45,49,...] 。在調試中,緩衝區的字符串表示是正確的,但實際值是錯誤的。 –

1

快得多版本的Eng.Fouad代碼:

BufferedInputStream bis = new BufferedInputStream(assetManager.open(fileName)); 
ByteArrayOutputStream buffer = new ByteArrayOutputStream(); 

int size; 
byte[] buffer = new byte[4096]; 

while((size = bis.read(buffer)) != -1) { 
    buffer.write(buffer, 0, size); 
} 

bis.close(); 
buffer.close(); 

byte[] result = buffer.toByteArray(); 
+0

不起作用。請參閱編輯。 –