byte輸出簡單解決方法
現在有一段程式,大概是這樣的:
對輸入的字串str處理:byte[] bb = str.getBytes(),獲得的位元組陣列存進一個ByteBuffer。另有一個執行緒不定期地從Bytebuffer裡取出長度不定的位元組,打包後由訊號傳輸裝置傳輸到另一臺電腦,收到包後再解析。
現在的問題是對英文字串處理沒問題,但中文的不定期出亂碼。我覺得是編碼的問題。用GB2312編碼,getBytes()處理後英文字元對應一個位元組,中文的是兩個。放到ByteBuffer裡後,擷取時可能剛好把中文的兩個位元組分開到兩個包裡了。因為傳輸後對每個包的解析是單獨進行的,直接處理,沒有再把位元組取出來快取後再處理,所以會出現亂碼。
所以我的想法是,能不能判斷ByteButter裡我要擷取的位元組陣列末尾的那個位元組是英文的還是中文的字元產生的。是英文的我就不處理,是中文的就分情況處理。
哪位能給我想個辦法,謝謝~
我簡單做了一個。。用GBK字元庫的char[],代替byte[]
public class strdeal {
public String getString(){//輸入字串
System.out.println("input string");
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
String s="";
try {
s = br.readLine();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//System.out.println(s);//可以直接列印字串
return s;
}
public byte[] getByet(String s){//字串轉為byte[]
byte[] bb = s.getBytes();
return bb;
}
private char[] getChars (byte[] bytes) {//byte轉為char[],使用GBK
Charset cs = Charset.forName ("GBK");
ByteBuffer bb = ByteBuffer.allocate (bytes.length);
bb.put (bytes);
bb.flip ();
CharBuffer cb = cs.decode (bb);
return cb.array();
}
public static void main(String args[]){//簡單測試
strdeal sdeal=new strdeal();
//System.out.println(sdeal.getString());
byte[] arrbyte=sdeal.getByet(sdeal.getString());
char[] arrchar=sdeal.getChars(arrbyte);
/*for(byte b:arrbyte){
System.out.print(b);
}*/
for(char c:arrchar){
System.out.print(c);
}
System.out.println();
String res=new String(arrbyte);
System.out.println(res);
}
}
/*輸出
input string
ABC124不是麼
ABC124不是麼
*/
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22259926/viewspace-625293/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- TOPAS輸出錯亂解決方法
- 成功解決PyCharm 彈出 Server‘s certificate is not trusted 的簡單解決方法PyCharmServerRust
- MySql中表單輸入資料出現中文亂碼的解決方法MySql
- Java------簡單的輸入/輸出Java
- 用簡單的方法解決問題
- 第4周 4.2 簡單輸入輸出
- IDEA控制檯輸出中文亂碼解決方法Idea
- 輸出判斷條件是或的解決方法
- C++ cout列印輸出 (解決輸出亂碼)C++
- 分享一個讓 Ping 的輸出更簡單易讀方法
- Resin的中文問題最簡單的解決方法
- 解決Win8無法玩LOL的簡單方法
- 簡單實現分行輸出的javascript程式碼JavaScript
- 教你簡單解決vm虛擬機器win10安裝介面鍵盤輸入不了的方法虛擬機Win10
- Invalid byte 3 of 3-byte UTF-8 sequence 解決方案
- cat 輸出亂碼問題解決
- 用最簡單的例子講解js中解決非同步的方法JS非同步
- 【c++】c++格式控制輸出簡單應用C++
- 實驗1 C語言輸入輸出和簡單程式編寫C語言
- MySQL傳輸表空間的簡單使用方法MySql
- 使用NVRAM的簡單解決方案VR
- Oracle Pipe解決實時輸出問題Oracle
- VNPY重新啟動後,沒有停止單掛單原因和簡潔解決方法
- sudo rosdep init 和 rosdep update 報錯的解決方法(簡單有效!)ROS
- 如何增加iPhone 6續航時間?12個方法簡單解決iPhone
- Win10系統中EDIUS7輸出緩慢的解決方法Win10
- 實驗1_C語言輸入輸出和簡單程式編寫C語言
- 簡單的mysql儲存過程,輸出結果集MySql儲存過程
- PHP GD庫解析一張簡單圖片並輸出PHP
- Java 迴圈&選擇 if&for 簡單應用 指定輸出Java
- C++簡單日誌/debug除錯資訊輸出C++除錯
- vue匯出excel(簡單方法完整介紹)VueExcel
- MVCC詳解,深入淺出簡單易懂MVC
- Laravel 中除錯輸出 SQL 語句的簡便方法Laravel除錯SQL
- RCmongodb出現id重複問題的簡單解決辦法jztMongoDB
- win10遊戲裡輸入法總是自動彈出的解決方法Win10遊戲
- Android6.0動態許可權最簡單的解決方法Android
- onMeasure簡單方法 完美解決ListView與ScollView衝突問題!View