2015-12-24 61 views
0

請幫助理解我的Java基礎的ByteArray VS Intarray

據我所知,原始字節能夠存儲的值從-127到127 =因此,只有ASCII值可以存儲在原始字節或字節數組。 我們一般存儲圖像,音樂和原始字節或字節數組中的音頻文件作爲這些文件包含-127之間的值到127 不能Unicode值存儲在字節數組,因爲這些值可高達65536 -

  1. 爲什麼我們通常更喜歡將從文件中讀取的字節存儲到bytearray中?爲什麼不將它存入int數組中?

  2. 我在一個word文檔中有漢字。 我使用inputstream(而不是閱讀器類)來讀取doc文件並複製它。輸入流被讀入字節數組,然後從那裏寫入輸出文件。 中文字符的值大於128,那麼它們是如何存儲在字節數組中的呢?我以爲我們應該只使用讀者類(而不是INPUTSTREAM)讀取具有UNICODE字符的單詞文檔。

    final String file="E:\\Users\\17496382.WUDIP\\Desktop\\chin.doc"; 
    final String file1="E:\\Users\\17496382.WUDIP\\Desktop\\chin1.doc"; 
    
    InputStream inputStream = new FileInputStream(file); 
    OutputStream out = new FileOutputStream(file1); 
    byte[] buffer = new byte[1024]; 
    
    int bytesRead; 
    while((bytesRead = inputStream.read(buffer))!=-1) { 
        out.write(buffer); 
        System.out.println(Arrays.toString(buffer)); 
    } 
    
+0

真的不難發現這其中一個網絡搜索:https://en.wikipedia.org/wiki/UTF-8#Description – fabian

回答

1
  1. 因爲文件始終字節。它們也可能是其他的東西(比如各種編碼中的字符),但它們總是字節。

  2. 編碼用於將字符轉換爲一個或多個字節,允許在字符集中包含超過255個字符。

The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)

+0

對不起,目前尚不清楚.... Point1 - Int和Byte存儲數字。那麼爲什麼我們不能將讀取的數據存儲在Int數組而不是字節數組中?當我們讀取inputstream.read()時,它的返回類型僅爲int ..所以爲什麼不能將它存儲在int數組中.. –

+0

因爲如果我們將數據存儲到int []中,您將使用300 %超過必要的內存,或者你要求數據是4的倍數。read()返回int的原因是它會爲所有字節值返回0-255, -1'代表'EOF'。 – Kayaman

+0

感謝您的澄清。第2點 - 所有的Unicode字符(65536)都可以存儲在Int數組右邊(因爲它支持將值存儲爲2,147,483,647?)。爲什麼不支持int數組用於UNICODE,我們使用READER類來讀取字符流... –