Re: [問題] InputStreamReader的read()
※ 引述《OoShiunoO (機機勳)》之銘言:
: 最近在看歐萊裡的JAVA網路程式設計
: 裡面有講到這段code:
: InputStreamReader r = new InputStreamReader(in, "MacCyrillic");
: StringBuilder sb = new StringBuilder();
: int c;
: while((c=r.read()) != -1) sb.append((char) c);
: return sb.toString();
: 他是讀取某個輸入串流in,並以MacCyrillic編碼轉換為unicode字串輸出。
: 其中read()會回傳0~65535的int,這代表Unicode字元,
: 我的問題是為什麼只會回傳0~65535而已?Unicode編碼不是有好幾百萬個嗎?
: 另外,(char)這個強制轉型是把int轉成char,它的轉換標準是依據什麼呢?
我建議直接看一下 java.lang.String, java.lang.Character API doc。
http://docs.oracle.com/javase/7/docs/api/java/lang/String.html
http://docs.oracle.com/javase/7/docs/api/java/lang/Character.html
JRE 對 Unicode 的支援是版本相依的,早期的 JRE(1.5-)只支援所謂的 BPM:
\u0000 ~ \uFFFF 這範圍,所以 Java char 是 2 bytes,在記憶體的 bits layout
同 byte/short/int/long 這一類的 integral type(2's complement),只差 char
是 unsigned。
API doc 指出 Java 1.7 支援 Unicode Standard v6,unicode 的範圍是
\u0000 ~ \u10FFFF。
確實有些字是無法單用一個 char 來存其 unicode 碼,這時候會使用兩個 char 來
代表一個字(surrogate pair)。
大致上來說 Java 1.5 開始去支援 BPM 以外的字,所以 Character class 中
許多 method 都引進吃 int type 的 overloading 版本(本來吃 char)。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.171.202.86
※ 文章網址: https://www.ptt.cc/bbs/java/M.1423406121.A.A09.html
推
02/08 23:48, , 1F
02/08 23:48, 1F
→
02/08 23:49, , 2F
02/08 23:49, 2F
→
02/08 23:49, , 3F
02/08 23:49, 3F
→
02/08 23:50, , 4F
02/08 23:50, 4F
※ 編輯: sbrhsieh (114.39.250.43), 02/09/2015 23:10:49
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
java 近期熱門文章
PTT數位生活區 即時熱門文章