1、 Stream是没有缓冲的,有数据直接写,所以不需要刷新。
2、 静态是不可以被序列化的,因为只可以序列化堆里面的东西,而静态是在方法区,所以不可以。
3、 ObjectOutputStream 是可以写上多个对象的,读的时候读一次出来一个!
4、 集合当中涉及到IO流的是Properties,IO流中涉及到多线程的是管道流,IO流涉及到集合(Vector的Enumeration)的是SequenceInputStream。
5、 RandomAccessFile对象里面读写的文件时需要有规律的,否则不容易随机访问。而且要注意每一条数据都一定要占一定的文位置以便于多线程同时分段写入。
6、注意英文不涉及到编码,中文才有。
7、图形化界面是由另外的线程来控制的,只要开启了图形化界面就开启了新的线程。
8、jar包双击执行的前提是图形化界面,因为没有控制台,不可以直接输出文字。
9、用bufferedReader什么的时候要记住flush(),用newLine()时要记着里面的字符没有换行标记,接收方如果也用newLine()方法接收,则认为一行还没有结束,所以程序将阻塞,所以发送方要记着加上buf.newLine();
10、强制结束程序运行中的一些小问题
当命令行陷入死循环什么的不会结束运行时Ctrl+C可以强制结束运行,但这是为什么呢?
其实很多程序运行都是有前提条件的,但基本上都是如果再运行当中收到了“-1”这个值就要结束运行,Ctrl+C其实就是输入了一个字节的“-1”(注意:直接输入“-1”时不可以的,因为它占两个字节,而read()方法一次只读一个字节,所以解析的和你预想的不一样!)标记,此时程序才结束运行。
还有一个需要注意的地方就是在TCP编程的时候,如果客户端运行结束后它调用了自己的关闭Socket方法时,此方法也返回一个字节的“-1”,此时如果服务器端结束运行的标志也是“-1”,则服务器将停止,这绝对不是你想要的,古要注意这一点!
11、对于readLine()!=null这个方法,读文件时可以结束,读键盘不可以结束。
12、停止TCP的方式:
1)自定义标记,如在数据传送完后来一个out.println(“over”);
服务端每接受一次数据都判断是否为结束标记,如果是就停止。
风险:如果传送的文件中就有此标记,则程序运行不成功。
2)发送数据之前先告诉服务器结束标记,服务器第一次只读一行。
3)时间戳
4)Socket自带的shutDown()方法。
13、telnet ip地址端口号:远程登录命令
如:telnet 127.0.0.1 80880
14、如果枚举中只有一个成员,则可作为单例设计模式
15、程序开发时一定要分清是编译时还是运行时!
编译时只看代码的定义不看代码的执行
16