今天复习了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推测走这条分支,但进入之后发现不对,发生回滚),然后又进入一段时间的判定。 所以 排序之后的数组 有利于这种分支预测的进行。
网友评论