首页 / JAVA / java中流的注意事项
java中流的注意事项
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java中流的注意事项,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2205字,纯文字阅读大概需要4分钟。
内容图文
![java中流的注意事项](/upload/InfoBanner/zyjiaocheng/1276/a793cd6be5f34ea0a86e9660cf4b1fb7.jpg)
缓冲流
缓冲流继承自过滤流,使用缓冲流时一些要注意的知识点:
1.如果在缓冲流对象创建时使用了其他流,最后关闭时只需关闭缓冲流就可以了,其他流会跟着自动关闭。
2.缓冲字符输入流(BufferedReader)可以直接 readLine() 一次读取一行,BufferedInputStream没有此方法。
3.用BufferedInputStream读取文件结束时返回的是-1,这和File流相同,不过如果使用BufferedReader的ReadLine()方法,读取到最后,返回的是null。
3.在使用缓冲输出流(BufferedOutputStream)(BufferedWriter)后,最好调用 out.flush() 方法,来强制写出剩余数据,清空缓冲区。
4.其实 BufferedInputStream 内部就是对一个 byte 数组的封装,这和我们自己创建 byte 数组作为缓冲区的效果是相同的。它们的特点都是不用每读一个字节就输出一次,而是一次性读了一点量的数据,再一个一个的输出,减少了IO与系统的交互次数,提高了效率。
5.可以用BufferedReader(字符缓冲流)结合InputStreamReader(转换流)对字节流进行读取,可以大幅提高效率。
6.如果使用buffererReader和BufferedWriter结合使用,在读写文件时,一次读取一行再写入,这时要手动设置换行,可以调用bw.newLine()方法换行(不要忘记flush)。更方便的做法是使用PrinterWriter(打印输出流)来输出,它可以直接使用pw.println(line)方法自动换行。
数据流
数据流一般都是用来对文件流进行包装,使得在写一些数据时可以节省使用的字节空间,在读取这些数据时也避免了一些繁琐的转换操作。比如我们要向文件中写一个 double 型的数据,一个 int 型的数据和一个 String 型的数据,然后再读取出来。那么就可以这样写
public class DataIODemo { public static void main(String[] args) { int i=100; double pi=Math.PI; //这个是圆周率 String s="java"; DataOutputStream out=null; DataInputStream in=null; try { out=new DataOutputStream(new FileOutputStream("test.dat")); out.writeInt(i); //写入int型数据out.writeDouble(pi); //写入double型数据out.writeUTF(s); //写入字符串in=new DataInputStream(new FileInputStream("test.dat")); int j=in.readInt(); //从文件中读取int型数据double db=in.readDouble(); //从文件中读取double型数据 String str=in.readUTF(); //从文件中读取字符串 System.out.println(j+""+db+""+str); } catch (IOException e) { e.printStackTrace(); }finally { try { in.close(); out.close(); } catch (IOException e) { e.printStackTrace(); } } } }
读出的结果为
100 3.141592653589793 java
使用数据流进行数据存储时,都是将数据转换成2进制存储的,不过不同数据类型存储的字节大小不同,所以取出数据时,要用不同的read方法来读取。比如我这里存储的顺序是先存储一位int型,再存储一个double型,最后存储一个字符串,读出的时候必须也按照同样的顺序来读,不然会 出现错误,这是因为每次read后,它的指针位置都会向后移动一定位数,如果用readInt(),它会读取四个字节的数据,然后指针移动到四个字节之后,然后使用readDouble()再读取,指针再移动,一直这样读。如果把读的顺序改变,就会变成用读String字符串的方法来读double型数据,产生错误。
对象流
1.使用对象流可以将一个对象进行序列化,然后进行传输 或者 存储到文件中,同样对象流可以对对象反序列化进行还原。
2.对象流只有ObjectInputStream 和ObjectOutputStream两种,因为数据在硬盘中都是以字节方式存储的,故对象想要在底层传输,就必须转换为字节。
3.对象想要进行序列换和反序列化,必须实现Serializable接口,Serializable接口为一个空接口,主要是起到标识作用。此外,对象还要进行构造函数的创建,以及实现toString()方法等一系列操作。
4.如果对象中的某个成员变量不想进行序列化,可以在变量的类型前加上 transient 关键字。
原文:http://www.cnblogs.com/weimore/p/7253240.html
内容总结
以上是互联网集市为您收集整理的java中流的注意事项全部内容,希望文章能够帮你解决java中流的注意事项所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。