java中io流系统庞大,知识点众多,作为小白通过五天的视频书籍学习后,总结了io系列的随笔,以便将来复习查看。

  本篇为此系列随笔的第一篇:io系列之字节流。

一、字节流的File读写操作。

    InputStream and OutputStream

一)、 OutputStream: 字节输出流。

   以一个操作文件的例子进行说明: FileOutputStream (说明,该类对象必须指向一个文件,)

    构造方法:
        FileOutputStream(File file) 创建一个向指定 File 对象表示的文件中写入数据的文件输出流.
        FileOutputStream(File file, boolean append) 创建一个向指定 File 对象表示的文件中写入数据的文件输出流。
        FileOutputStream(FileDescriptor fdObj) 创建一个向指定文件描述符处写入数据的输出文件流,
                  该文件描述符表示一个到文件系统中的某个实际文件的现有连接。

        FileOutputStream(String name) 创建一个向具有指定名称的文件中写入数据的输出文件流。
              使用方法及注意事项:
                    如: FileOutputStream fo = new FileOutputStream("filme.txt");
                  1、会在程序执行路径下创建一个filme.txt文件,该路径不因包名的变化而变化,只在执行路径下。
                  2、如果该路径下已有同名文件,那么该文件会被覆盖。

        FileOutputStream(String name, boolean append) 根据给定的文件名以及指示是否附加写入数据的 boolean 值来构造 FileWriter 对象。
              使用方法及注意事项:
                    如: FileOutputStream fo = new FileOutputStream("filme.txt",true);
                  1、如果传入的参数为true,会在程序执行路径下打开一个已有的filme.txt文件。
                  2、如果该路径下没有该文件,则新建一个该文件, 并在文件末尾添加数据。
                  3、如果传入的参数为false,无论有无文件都会新建该文件。

        示例:1、以传入文件名的方式创建一个FileOutputStream对象(该对象一被初始化就必须明确被操作的文件)
           2、而且该文件会被新创建到指定目录下。
             3、路劲描述: 如: "D:\\java\\myclass\\winter.txt"

    写入方法:void write(byte[] b) 将 b.length 个字节从指定 byte 数组写入此文件输出流中。
         void write(byte[] b, int off, int len) 将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此文件输出流。
           void write(int c) 写入指定字节(就是写入该int型数的低八位,最后一个字节)。

            如: fo.write("winter is coming".getBatys());

            注意:字节流与字符流不同,这里每写入一个字节都会直接存入文件中,不需要flush()。

               off表示开始角标, len为长度。

    刷新方法: 字节流不需要刷新,没有flush方法。

    关闭方法:void close() 关闭此流。

            如: fo.close();
               (为了节约Windows资源,最后一定要 close ,关闭io。)

        注意:1、 几乎所有的IO操作都会抛出 IOException 异常,注意对异常的处理(try、catch或者throws)
           2、在程序调用Io结束后,一定使用 close语句结束流对象。

二)、InputStream :字符输入流。
    以一个操作文件的例子进行说明: FileInputStream (说明,该类对象必须指向一个文件,)

    构造方法:
        FileInputStream(String name) 在给定从中读取数据的文件名的情况下创建一个新 FileInputStream
              使用方法及注意事项:
                    如: FileInputStream fi = new FileInputStream("filme.txt");
                 1、创建一个FileInputStream对象,该对象会指向 filme.txt 文件。
                 2、该文件必须存在,否则抛出 FileNotFoundException 异常。

        FileInputStream(FileDescriptor fdObj) 通过使用文件描述符 fdObj 创建一个 FileInputStream,
                          该文件描述符表示到文件系统中某个实际文件的现有连接。

        FileInputStream(File file) 通过打开一个到实际文件的连接来创建一个 FileInputStream,
                      该文件通过文件系统中的 File 对象 file 指定。

    取出方法:
        int read() 读取单个字节数据, 返回值为该字节值, 可使用(char)强转为字符形式。
             从文件的开头, 随着该方法的不断调用,一直读到文件结尾, 之后返回 -1.

             取出的字节本身只有8为,但是变为int型被补0到了32为(平时提升是补1,但是此处有位与255操作).

                    如: int i = fi.read(), char c = (char)i;

        int read(byte[] b, int off, int len) 将字节数据读入字节数组的某一部分
             将文件中的数据从文件头开始读取,并存入数组,直到文件中数据读完 或者 数组位置存满。
             只要文件中还有数据可读,便返回读取的字节个数。如果文件中已经没有数据可读,返回-1.
                    如: int i = 0; baty [] b = new baty[1024];
                       while((i = fi.read(c))!=-1)
                       { System.out.print(new String(b,0,i)); }

    获取文件字节数:
        int available() 返回下一次对此输入流调用的方法可以不受阻塞地从此输入流读取(或跳过)的估计剩余字节数。
              即:返回剩余的字节数。
              可以用来作为定义接受数据的字节数组长度的依据, 但是大型文件(如视频等)不建议使用该方法。

    结束方法:
        void close() 关闭该流并释放与之关联的所有资源。 此语句为必须执行语句。

二、字节流的 缓冲功能

    缓冲区的出现是为了增加流的效率的,所以建立缓冲区之前必须要先有流对象。
    缓冲区对象只是给传入的流对象加了一个缓冲区,他的所有的读、写功能其实还是在调用原来的流对象的功能(close关闭的是流对象)

一)、BufferedOutputStream :

    构造方法:
        BufferedOutputStream(OutputStream out) 创建一个新的缓冲输出流,以将数据写入指定的底层输出流。
              如:FileOutputStream fo = new FileOutputStream()
                BufferedOutputStream bo = new BufferedOutputStream(fo);
            为流对象 fo建立了一个缓冲区对象fo。

        BufferedOutputStream(OutputStream out, int size) 创建一个新的缓冲输出流,以将具有指定缓冲区大小的数据写入指定的底层输出流。
              如:FileOutputStream fo = new FileOutputStream()
                BufferedOutputStream bo = new BufferedOutputStream(fo,1024);
            为流对象 fo建立了一个缓冲区对象 bo,缓冲长度为 1024个字符。
    写入方法:
        void write(byte[] b, int off, int len) 将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此缓冲的输出流。

        void write(int b) 将指定的字节写入此缓冲的输出流。(其指定字节就是int型数据的最后八位)

                与传入的流对象相同, 这些方法底层就是在调用流对象的相应方法。

    关闭方法:void close();
          与传入的流对象相同, 此方法底层就是在调用流对象的close方法,缓冲区调用了过后,流对象不用重复关闭。

    其他方法:
        void flush() 刷新此缓冲的输出流。

二)、BufferedInputStream:

    构造方法:
        BufferedInputStream(InputStream in) 创建一个 BufferedInputStream 并保存其参数,即输入流 in,以便将来使用。
                    如:FileInputStream fi = new FileInputStream()
                      BufferedInputStream bi = new BufferedInputStream(fi);
                  为流对象 fi建立了一个缓冲区对象 bi。

        BufferedInputStream(FileInputStream in, int sz) 创建具有指定缓冲区大小的 BufferedInputStream 并保存其参数,。
                    如:FileInputStream fi = new FileInputStream()
                      BufferedInputStream bi = new BufferedInputStream(fi,1024);
                  为流对象 fi建立了一个缓冲区对象 bi,缓冲长度为1024个字符。

    取出方法: 基本方法有流对象的相同(因为在调用流对象方法), 但是多了一个行读取方法。

        int read() 读取单个字节,返回值为该字节前补 0 至4个字节长度(write的 时候只写入最后一个字节)

                    (本来数据提升是在前补1的,但是此处内部有位与255操作)
             从文件的开头, 随着该方法的不断调用,一直读到文件结尾, 之后返回 -1.

        int read(bate[] cbuf, int off, int len) 将字节读入数组的某一部分
            将文件中的数据从文件头开始读取,并存入数组,知道文件中数据读完 或者 数组位置存满。
            只要文件中还有数据可读,便返回读取的字节个数。如果文件中已经没有数据可读,返回-1.
                  如: int i = 0; Bate [] b = new Bate[1024];
                     while((i = bi.read(b))!=-1)
                     { System.out.print(new String(b,0,i)); }

    结束方法:
        void close() 关闭该流并释放与之关联的所有资源。 此语句为必须执行语句。
              底层调用 流对象的 close 方法。

io系列之字节流的更多相关文章

  1. java io系列01之 "目录"

    java io 系列目录如下: 01. java io系列01之  "目录" 02. java io系列02之 ByteArrayInputStream的简介,源码分析和示例(包括 ...

  2. Java IO系列之一:IO

    1. 概述 Java IO一般包含两个部分: 1.java.io包中堵塞型IO: 2.java.nio包中的非堵塞型IO,通常称为New IO. java.io包下,分为四大块近80个类: 1.基于字 ...

  3. io系列之字符流

    java中io流系统庞大,知识点众多,作为小白通过五天的视频书籍学习后,总结了io系列的随笔,以便将来复习查看. 本篇为此系列随笔的第一篇:io系列之字符流. IO流 :对数据的传输流向进行操作,ja ...

  4. java io系列02之 ByteArrayInputStream的简介,源码分析和示例(包括InputStream)

    我们以ByteArrayInputStream,拉开对字节类型的“输入流”的学习序幕.本章,我们会先对ByteArrayInputStream进行介绍,然后深入了解一下它的源码,最后通过示例来掌握它的 ...

  5. java io系列03之 ByteArrayOutputStream的简介,源码分析和示例(包括OutputStream)

    前面学习ByteArrayInputStream,了解了“输入流”.接下来,我们学习与ByteArrayInputStream相对应的输出流,即ByteArrayOutputStream.本章,我们会 ...

  6. java io系列12之 BufferedInputStream(缓冲输入流)的认知、源码和示例

    本章内容包括3个部分:BufferedInputStream介绍,BufferedInputStream源码,以及BufferedInputStream使用示例. 转载请注明出处:http://www ...

  7. java io系列21之 InputStreamReader和OutputStreamWriter

    InputStreamReader和OutputStreamWriter 是字节流通向字符流的桥梁:它使用指定的 charset 读写字节并将其解码为字符.InputStreamReader 的作用是 ...

  8. java io系列22之 FileReader和FileWriter

    FileReader 是用于读取字符流的类,它继承于InputStreamReader.要读取原始字节流,请考虑使用 FileInputStream.FileWriter 是用于写入字符流的类,它继承 ...

  9. java io系列25之 PrintWriter (字符打印输出流)

    更多内容请参考:java io系列01之 "目录" PrintWriter 介绍 PrintWriter 是字符类型的打印输出流,它继承于Writer.PrintStream 用于 ...

随机推荐

  1. /proc/diskstats

    读取磁盘统计信息,如下所示: linux-HpdBKE:~ # cat /proc/diskstats sda sda1 sda2 dm- dm- dm- sda为整个硬盘的统计信息,sda1为第一个 ...

  2. umount -fl用法

    umount, 老是提示:device is busy, 服务又不能停止的.可以用"umount -fl"解决! 挂载: mount - mount a filesystem mo ...

  3. QTP 自动货测试桌面程序-笔记-运行结果中添加截图

    3种方法: 方法1:使用设置:SnapshotReportMode oldMode = Setting("SnapshotReportMode") Setting("Sn ...

  4. 表单中input name属性有无[]的区别

    1 input数组 如下一个表单: <input type="text" name="username[]" value="Jason" ...

  5. jquery获取select选择的文本与值

    jquery获取select选择的文本与值获取select :获取select 选中的 text :    $("#ddlregtype").find("option:s ...

  6. 为WebRTC 应用部署Turn Server

    部署WebRTC 或 SIP p2p 方案时经常会遇到p2p 无法穿透的环境, 这时就是TunServer 的用武之地了. 这里我们使用turnserver-0.7.3 下载confuse依赖库 wg ...

  7. JQuery跳出each循环的方法(包含数组遍历)

    0. 前言 也许我们通过 jquery 的循环方法进行数组遍历,但是当不符合条件时,怎么跳出当前循环?(即用each方法内,当不满足条件时想break跳出循环体,想continue继续执行下一个循环遍 ...

  8. RBS SharePoint 2010 Server.wmv

    视频地址: https://www.youtube.com/watch?v=DXi2er514iA&feature=youtu.be

  9. React 学习(七) ---- create-react-app

    现在react 基础知识已经算是学完了,知道了React是做什么的,以及怎么使用,是时候学习一个webpack, babel 等现代化前端开发了,真正做项目的时候,我们不可能再使用babel 的线上编 ...

  10. poj-1236(强连通分量)

    题意:给你n个点,每个点可能有指向其他点的单向边,代表这个点可以把软件传给他指向的点,然后解决两个问题, 1.问你最少需要给几个点,才能使所有点都能拿到软件: 2.问你还需要增加几条单向边,才能使任意 ...