缓冲流

缓冲流继承自过滤流,使用缓冲流时一些要注意的知识点:

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=;
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();
}
}
} }

读出的结果为

 3.141592653589793 java

使用数据流进行数据存储时,都是将数据转换成2进制存储的,不过不同数据类型存储的字节大小不同,所以取出数据时,要用不同的read方法来读取。比如我这里存储的顺序是先存储一位int型,再存储一个double型,最后存储一个字符串,读出的时候必须也按照同样的顺序来读,不然会 出现错误,这是因为每次read后,它的指针位置都会向后移动一定位数,如果用readInt(),它会读取四个字节的数据,然后指针移动到四个字节之后,然后使用readDouble()再读取,指针再移动,一直这样读。如果把读的顺序改变,就会变成用读String字符串的方法来读double型数据,产生错误。

对象流

1.使用对象流可以将一个对象进行序列化,然后进行传输 或者 存储到文件中,同样对象流可以对对象反序列化进行还原。

2.对象流只有ObjectInputStream 和ObjectOutputStream两种,因为数据在硬盘中都是以字节方式存储的,故对象想要在底层传输,就必须转换为字节。

3.对象想要进行序列换和反序列化,必须实现Serializable接口,Serializable接口为一个空接口,主要是起到标识作用。此外,对象还要进行构造函数的创建,以及实现toString()方法等一系列操作。

4.如果对象中的某个成员变量不想进行序列化,可以在变量的类型前加上 transient 关键字。

java中流的注意事项的更多相关文章

  1. Java内部类使用注意事项

    Java内部类使用注意事项: 1. 非静态内部类成员可以访问外部类实例成员 (如注释1),但外部类访问非静态内部类的成员 必须创建非静态内部类对象来访问其成员,如注释2 public class La ...

  2. 《精通并发与Netty》学习笔记(09 - Java中流的概念)

    Java中流的概念 java程序通过流来完成输入/输出.流是生产或消费信息的抽象.流通过java的输入/输出与物理设备链接.尽管与它们链接的物理设备不尽相同,所有流的行为具有同样的方式.这样,相同的输 ...

  3. [原]Java工程打包注意事项

    注意事项(持续增加...): 如果Java工程中用到了注解,在用eclipse打jar包时需要注意一下,勾上“Add directory entries”,否则注解的类会注册不上

  4. Linux(Centos)之安装Java JDK及注意事项

    1.准备工作 a.因为Java JDK区分32位和64位系统,所以在安装之前必须先要判断以下我们的Centos系统为多少位系统,命令如下: uname -a 解释:如果有x86_64就是64位的,没有 ...

  5. 【转】Java并发编程注意事项

    保证线程安全的三种方法: 不要跨线程访问共享变量 使共享变量是final类型的 将共享变量的操作加上同步 一开始就将类设计成线程安全的, 比在后期重新修复它,更容易. 编写多线程程序, 首先保证它是正 ...

  6. Java中流的概念

    http://wapwenku.baidu.com/view/04714847b307e87101f69656.html?ssid=0&from=1086k&uid=0&pu= ...

  7. oracle 事务简介,锁的概念,java访问数据库注意事项

    java链接oracle和连接其他数据库一样有两种方式:1 桥接 jdbc-obdc2 jbdc insert语句一次插入大量数据 insert into table (列1,列2,列3) selec ...

  8. java 中流的使用

    Java中的流,可以从不同的角度进行分类. 一.按照数:输入流和输出流. 输出流: 输入流: 因此输入和输出都是从程序的角度来说的. 二.按照处理数据单位不同可以分为:字节流和字符流. 字节流和字符流 ...

  9. Linux(Centos、Debian)之安装Java JDK及注意事项(转)

    --转自:http://www.cnblogs.com/hanyinglong/p/5025635.html 说明:本人是以Debian 操作系统来进行安装的,这篇文章有很大帮助,才学Linux对有些 ...

随机推荐

  1. SQL state [72000]; error code [1461]; ORA-01461: 仅能绑定要插入 LONG 列的 LONG 值 ; nested exception is java.sql.BatchUpdateException: ORA-01461: 仅能绑定要插入 LONG 列的 LONG 值

    本文转自  https://www.cnblogs.com/yingsong/p/5685790.html 原 因:某一个字段本为varchar2(1024),但是实际要插入的值超过varchar2允 ...

  2. Java笔记--枚举&注解

    1.自定义枚举类的实现,例: class Season{ //1,提供类的属性,声明为rivate final private final String name; private final Str ...

  3. 0105 springMVC开发基础

    背景 已经明确了MVC的思想和SpringMVC的基本流程,下面就都具体的mvc开发细节知识了. @RequestMapping springMVC核心流程中,启动阶段会把注解@RequeestMap ...

  4. Combobox出现System.Data.DataRowView的原因

    这种情况多次遇到.有时候明明完全相同的代码,在不同的场景运行却是两种结果, 其中一种坏的结果就是 comboBox所有的项都显示为System.Data.DataRowView 今天仔研究了一下,应该 ...

  5. 不能安装64位office提示已安装32位如何处理

    不能安装64位office提示已安装32位如何处理?   1 2 3 4 5 6 当你遇到提示说[无法安装64位版本的office,以为在您的PC上找一下32位程序......]时如果你还想安装64位 ...

  6. Wordpress自动更新失败

    Wordpress自动更新失败 一.手动升级Wordpress教程第一步:备份好Wordpress数据 在决定手动升级Wordpress前,你需要做好Wordpress的数据备份工作,以防手动升级失败 ...

  7. HihoCoder第九周 状态压缩 二 与POJ2411总结

    在此我向各位博友求助,特别想知道除了HihoCoder上面的结果要对1e9+7取余之外,这两道题还有什么其他的问题,都是骨牌覆盖问题,都是状态压缩+dp,为什么我能过poj2411的程序过不了Hiho ...

  8. Visual Studio Code 断点调试配置方法(请按我的步骤 一定可以做到)

    1 visual studio code 的 extentions 里安装插件 debugger for chrome2 devtool: 'eval-source-map', cacheBustin ...

  9. .Net 笔记

    1.介绍 .net一般指.Net Framework框架.一种平台,一种技术. C#是一种编程语言,可以开发基于.net平台的应用. .Net Framework是框架是.Net平台不可缺少的一部分, ...

  10. 怎样解题 --解题表(how to solve it)

    <怎样解题> 美.波利亚 下面是来自书中的解题表: 理解题目 第一 理解题目 你必须理解题目 未知量是什么?已知数据是什么?条件是什么? 条件有可能满足吗?条件是否可以确定未适量?或者它不 ...