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。

arrow
arrow
    全站熱搜

    Jemmy 發表在 痞客邦 留言(0) 人氣()