Java IO分二進位和純文字的資料流,各以InputStream / OutputStream與Reader / Writer為代表。Socket預設為二進位流,若要轉為純文字,則需InputStreamReader / OutputStreamWriter轉換,其法如下:
InputStreamReader isr = new InputStreamReader(socket.getInputStream());
OutputStreamWriter osw = new OutputStreamWriter(socket.getOutputStream());
欲以文字列方式讀取,採用BufferedReader的readLine()去讀會有個陷阱。就是寫入的地方若沒加上換行符號,readLine會一直等待讀到換行符號為止。是故Output應如下:
OutputStreamWriter osw = new OutputStreamWriter(socket.getOutputStream());
osw.write(msg + "\n"); // msg字串結尾若有換行則不必加\n。
osw.flush(); // 記得出清。
後來我試著用PrintWriter替代OutputStreamWriter,使用println替代write以省略額外加入換行符號可行,仍需flush。
全站熱搜
留言列表