美文网首页
[Java]开发安卓,你得掌握的Java知识13.5

[Java]开发安卓,你得掌握的Java知识13.5

作者: 入梦瞌睡 | 来源:发表于2019-08-23 00:00 被阅读0次

0.前言

  • 上一篇文章我们大致讲述了服务器端与客户端的简单的交互

1.关于输入输出流的使用

BufferedReader与BufferedWriter与PrintStream

  • 在之前的代码中,我们是使用BufferedReader与PrintStream来进行输入输出的
BufferedReader br 
= new BufferedReader(new InputStreamReader(socket.getInputStream));
  • 这句话挺长的,这里解释一下为什么会这么长:
    BufferedReader是缓冲字符输入流,
    其构造方法BufferedReader()中的参数,需要是Reader类型的

  • socket.getInputStream,可以使我们获得发送过来客户端(或者是服务器端)的数据,但是它返回的是InputStream

  • 想要把socket.getInputStream的InputStream变为Reader,就得使用new InputStreamReader()

BufferedReader br 
= new BufferedReader(new InputStreamReader(socket.getInputStream));

String line = null;

while((line = br.readLine()) != null){
    System.out.Println(line);
}
  • String line是用来装br读入的内容的

  • 要注意,br的readLine()返回的是字符串,但是read()返回的是整型(表示读了多少)

  • BufferedWriter同理:
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));

String line = "abc";

bw.write(line);
  • 但是为了方便测试,我们可以考虑使用PrintStream:
String line = "abc\n";
PrintStream ps = new PrintStream(socket.getOutputStream());
ps.println(line);
  • 记得关闭输入输出流(尤其是输出流),不关闭的话,会导致输出的内容传不过去(会留在缓冲区而不会实际发过去)

2.关于多线程的调试

  • 多线程的调试相对来说比较麻烦,原因是要同时启动两个main函数,两个main都要单击左边的绿色小箭头选择DeBug模式


  • 在非主线程中的代码,在打上断点后,需要右键断点,然后选择All,这样才能在需要的时候停在该线程的指定位置

  • 两个main函数并不会共用内存空间,所以static静态变量并不能在两个main之间共用
    要想共用只能使用socket传递
  • 有很多时候,多线程情况下的DeBug调试未必会有想要的结果,在指定的地方插入System.out.println("具体内容");效果可能会更好

3.总结

(1)通过Socket的交互其实并不难,虽然代码看似复杂,但实际上来来去去就是那么些东西,多些几遍就熟悉了,或者将这部分代码直接封装起来(就像上一篇文章中的MessageManager中的两个函数一样),然后直接在线程中调用即可
(2)多线程的调试会比单独的一个main函数的调试要麻烦,尤其涉及到交互方面的多线程调试可能尤为头疼。原因是某些语句会在必要时刻阻塞线程,很容易因此看不清具体情况。
除了DeBug模式以外,还要多一点使用终端输出(System.out.println)来帮忙看一看,到底某些语句是否执行

相关文章

网友评论

      本文标题:[Java]开发安卓,你得掌握的Java知识13.5

      本文链接:https://www.haomeiwen.com/subject/shposctx.html