1,流的认识和分类

2,Java种处理流的IO类架构

3,字节流和字符流转换

4,NIO的概述

5,Java IO关闭资源

1,流的认识和分类

  流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。

  根据流向,我们分为输入流和输出流

  根据流里数据类型组织结构,我们分为字符流和字节流

字节流 字符流
一次读入或读出是8位二进制。 一次读入或读出是16位二进制。
直接对文件操作。 流和文件之间有个缓存区。字符流流独立于文件

             

   下面程序验证缓冲区的存在。

    字节ByteDemo

File file = new File("ByteDemo_01.txt");
OutputStream out = null;
String str = "helloworld!!";
try {
out = new FileOutputStream(file);//获取输出字节流
out.write(str.getBytes());
} catch (IOException e) {
e.printStackTrace();
}

    ByteDemo_01.txt内容:

    字符流:CharDemo_01

Writer out = null;
String str = "helloworld!!";
try {
out = new FileWriter(file);
out.write(str);
}catch(IOException e){
e.printStackTrace();
}

    这时CharDemo_01.txt内容为空,对缓冲区没有刷新,字符并没有写入到文件中,在out.write(str);语句后加入out.flush();之后才把字符写入文件。

2,Java种处理流的IO类架构

    java处理字节流的超类是InputStream,OutputStream.常用方法见API,

    为了弥补字节流没有缓冲区的一些应用场景下的不足,Java给InputStream提供了两种改进方法

        • 直接在InputStream上作出程序改进,我们可以自定义缓冲区数组,将读取的内容首先读进自己的缓冲区数组。

            int read(byte[] b, int off, int len)//将字节流读入b数组,off是b数组的起始位置,len是读入的长度,off+len<=b数组的长度

            byte[] b = new byte[1024];

            in = new FileInputStream(file);

            in.read(b,0,1024);//从b[0]对b写入1024字节的数据

        • 使用了装饰者类FilterInputStream,其子类BufferedInputStream在程序实现上封装了缓冲区数组,默认大小是8192

            BufferedInputStream bis = new  BufferedInputStream(in)           

            形式上和上面相同。

    在访问效率上当第一种设计的方法缓冲区数组长度大于等于8192时和第二种访问效率类似。只是第二种方法提供了mar()和reset()方法,丰富了我们访问数据时所能使用的方法

    java处理字符流的超类的Reader,Writer

    java处理字符流时默认实现了缓冲区,方法和BufferedInputStream类似,不同的是字符流在读取写入时记得及时刷新缓冲区,防止缓冲区覆盖。

3,字节流和字符流转换 

  在介绍转换之前首先需要了解解码和编码

  解码:String-->byte[]  str.getbBytes("GBK")//以GBK形式对原字符串解码

  编码:byte[]-->String  String str = new String(b,"GBK")//以GBK形式对原字节编码赋值给str

  Reader的子类InputStreamReader和Writer的子类OutputStreamWriter提供了字节流和字符流的转换。

    InputStreamReader

       字节流--->字符流。是字节流通向字符流的桥梁。如果不指定字符集编码,该解码过程将使用平台默认的字符编码,如:GBK。

       InputStreamReader isr = new InputStreamReader(new InputStream(),Charset cs);//

       适用:适用于在某些应用中文本文件或文本内容初始获取时是字节流的形式。

    OutputStreamWriter

      字符流--->字节流。可使用指定的 charset 将要写入流中的字符编码成字节。

OutputStreamWriter(OutputStream out, Charset cs)

      适用于只接受处理字节流的输入,需要将文本文件或者内容的字符流写入。

4,NIO的概述

  NIO是Java新的IO处理机制,它们最大的不同是NIO对流实现了缓冲区机制,不同于传统的IO是从程序员封装实现的,它是从底层操作系统实现的,其效率更高。

5,Java IO关闭资源

  以输入字符流为例

  FileReader fr = null;
  FileWriter fw = null;

  try{}catch(){}

  finally{

    try{

      if (null != fr){

        fr.close();

      }

    }catch (IOException e){

      throw new RuntimeException("关闭失败");
    }

      try{

        if (null != fw){

          fr.close();

        }

      }catch (IOException e){

        throw new RuntimeException("关闭失败");
      }

  }//finally

Java基础--IO的更多相关文章

  1. Java基础IO流(二)字节流小案例

    JAVA基础IO流(一)https://www.cnblogs.com/deepSleeping/p/9693601.html ①读取指定文件内容,按照16进制输出到控制台 其中,Integer.to ...

  2. Java基础-IO流对象之压缩流(ZipOutputStream)与解压缩流(ZipInputStream)

    Java基础-IO流对象之压缩流(ZipOutputStream)与解压缩流(ZipInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 之前我已经分享过很多的J ...

  3. Java基础-IO流对象之随机访问文件(RandomAccessFile)

    Java基础-IO流对象之随机访问文件(RandomAccessFile) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.RandomAccessFile简介 此类的实例支持对 ...

  4. Java基础-IO流对象之内存操作流(ByteArrayOutputStream与ByteArrayInputStream)

    Java基础-IO流对象之内存操作流(ByteArrayOutputStream与ByteArrayInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.内存 ...

  5. Java基础-IO流对象之数据流(DataOutputStream与DataInputStream)

    Java基础-IO流对象之数据流(DataOutputStream与DataInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.数据流特点 操作基本数据类型 ...

  6. Java基础-IO流对象之打印流(PrintStream与PrintWriter)

    Java基础-IO流对象之打印流(PrintStream与PrintWriter) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.打印流的特性 打印对象有两个,即字节打印流(P ...

  7. Java基础-IO流对象之序列化(ObjectOutputStream)与反序列化(ObjectInputStream)

    Java基础-IO流对象之序列化(ObjectOutputStream)与反序列化(ObjectInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.对象的序 ...

  8. java基础-IO流对象之Properties集合

    java基础-IO流对象之Properties集合 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Properties集合的特点 Properties类表示了一个持久的属性集. ...

  9. Java基础-IO流对象之字符缓冲流(BufferedWriter与BufferedReader)

    Java基础-IO流对象之字符缓冲流(BufferedWriter与BufferedReader) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.字符缓冲流 字符缓冲流根据流的 ...

  10. Java基础-IO流对象之字节缓冲流(BufferedOutputStream与BufferedInputStream)

    Java基础-IO流对象之字节缓冲流(BufferedOutputStream与BufferedInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在我们学习字 ...

随机推荐

  1. SpringMvc配置 导致实事务失效

    SpringMVC回归MVC本质,简简单单的Restful式函数,没有任何基类之后,应该是传统Request-Response框架中最好用的了. Tips 1.事务失效的惨案 Spring MVC最打 ...

  2. C参数计算

    C‘计算参数时,从右向左压栈的 int a[]={1,3,4}; int * ptr=a; pirntf("%d,%d\n",*ptr,*(++ptr)); 输出都是3:

  3. 2015第40周二Node学习

    node历史 今天看cnode开源项目用了io.js,在查这个项目时发现这篇文章node历史,node.js和io.js关系谈到Node.js的由来,不可避免要聊到它的创始人Ryan Dahl.在20 ...

  4. 如何在svn系统中使用git

    如果正在使用svn,打算换到git,又暂时不想放弃已有的svn代码库,可以选择git-svn.说一说我自己从svn到git的经验吧. 开始 安装最新版本的git,从git 1.5.3以后支持git-s ...

  5. 数据结构(虚树,动态规划):HNOI 2014 世界树

    Hnoi2014 世界树 Description 世界树是一棵无比巨大的树,它伸出的枝干构成了整个世界.在这里,生存着各种各样的种族和生灵,他们共同信奉着绝对公正公平的女神艾莉森,在他们的信条里,公平 ...

  6. 手把手教你把VIM改成一个集成开发环境

    转载自:http://blog.csdn.net/wooin/article/details/1858917 在原文基础上经过自己验证,修改和完善 OS:Fedora19 VIM:VIM7.4 一.写 ...

  7. SRM 397(1-250pt)

    题意:对于一个长度n的数列(由1-n组成,n <= 8),每次操作可以reverse k个连续的数.问最少多少次操作可以将该数列转化成递增的数列. 解法:就是一个BFS.只是由于最开始学习BFS ...

  8. Postman 基本操作学习

    History 所有使用postman发送的request都会保存在这里.点击之后会在当前Tab打开. 参考: Requests History Environments 这里用来设定当前reques ...

  9. centos安装GO

    1,下载 go1.5.1.linux-amd64.tar.gz 2,将go解压到/opt,个人喜好罢了[root@localhost ~]# tar -C /opt -xzf ./go1.5.1.li ...

  10. sqlserver客户端连接只显示特定数据库的配置方法

    首先,在实例级,有一个 view any database的这个属性,打开时可以看到所有数据库的元数据表,因此能看到实例下所有数据库的名字.默认public角色拥有这个属性.所以新建的登陆是可以看到所 ...