IO流之又遇见

今天复习了java的io流    


包括 之前不太明白的  byteArrayInputStream  和  byteArrayOutputStream

到现在才搞明白 原来  不同于其他的对流 

这对流的 输入流是 inputstream的参数  数组    可以是一个String.getBytes()

而输出位置 是outputStream  阻塞在管道里的内容  可以调用toString  和toByteArray

来获取 输出的位置  也可以调用writeTo 指定磁盘位置


在这里 发现了一个小的知识点   如果只是字符串的话 可以使用StringReader


还复习了  objectInputStream和Input 这对流

其中由程序向磁盘写出 (序列化) 需要的参数是 File 也就是序列化到哪   output

用output.writeObject()来搞定。  需要注意的是  在写出的时候 要在最后写出一个null来应对读取时候的异常   

读取  (反序列化)  用 input  磁盘===>程序   需要的参数 也是一个File  

之后你可以得到一个对象  当然  应当用 input.readObject !=null 来判断是否还要继续读下去

还有对象和字节数组的转换 

对象转字节的时候    两个Output流都不用参数   直接用对象流套字节数组流   之后对象流.WriteObject 读取对象  然后  字节数组.toByteArray 得到数组

反之   用Input    这次  字节流需要传入  字节数组 作为参数   直接用对象流套在上面 然后用ReadObject  读取   得到对象   

并且 今天在StackOverFlow上看到一个问题 ,关于为什么Sort后的数组 会比没Sort的数组访问速度 快好多 ,  开始 我以为是跟二分法一样,因为排除的元音。后来经过解答原来是在CPU层级上有一个推测的能力,如果你在循环中写了一个判断条件,那么CPU在执行多少此后,会根据之前的执行结果 对之后的结果进行一个推测,不在经过判断,如果发现一直正确,那么他会一直这样推测,直到不正确,(不正确是指cup推测走这条分支,但进入之后发现不对,发生回滚),然后又进入一段时间的判定。 所以 排序之后的数组 有利于这种分支预测的进行。

你可能感兴趣的:(IO流之又遇见)