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. 解决mybatis generator警告Cannot obtain primary key information from the database, generated objects may be incomplete

    使用 mybatis generator 生成pojo.dao.mapper时 经常出现 Cannot obtain primary key information from the database ...

  2. Appium之开发环境搭建

    1.下载Appium 去官方网站下载http://appium.io/# : 本次以appium-desktop-setup-1.8.0.exe 文件为例,使用桌面版就不再需要下载server版本: ...

  3. 深度学习最全优化方法总结比较(SGD,Adagrad,Adadelta,Adam,Adamax,Nadam)(转)

    转自: https://zhuanlan.zhihu.com/p/22252270    ycszen 另可参考: https://blog.csdn.net/llx1990rl/article/de ...

  4. Python——线程1

    多线程并发 from threading import Thread import time #多线程并发 def func(n): time.sleep(1) print(n) for i in r ...

  5. 使用脚本调用maven命令后脚本直接退出问题

    在带有maven命令的bat脚本执行的时候,执行完一个mvn 目标后会自动退出,pause命令也无效. 原因:mvn本身是一个bat命令,因此在exit退出的时候,整个脚本进程将退出,加入call命令 ...

  6. webpack——快速入门【一】

    学习webpack https://github.com/webproblem/learning-article#webpack https://github.com/lengziyu/learn-w ...

  7. UESTC482-Charitable Exchange-bfs优先队列

    #include <cstring> #include <algorithm> #include <iostream> #include <queue> ...

  8. Python中pandas模块解析

    Pandas基于两种数据类型: series 与 dataframe . 1.Series 一个series是一个一维的数据类型,其中每一个元素都有一个标签.类似于Numpy中元素带标签的数组.其中, ...

  9. python列表解析式,字典解析式,集合解析式和生成器

    一.列表解析式(列表推倒式): 功能:是提供一种方便的列表创建方法,所以,列表解析式返回的是一个列表. 1 lst = [1, 3, 5, 8, 10] 2 ll = [x+x for x in ls ...

  10. 【CF1097E】Egor and an RPG game(动态规划,贪心)

    [CF1097E]Egor and an RPG game(动态规划,贪心) 题面 洛谷 CodeForces 给定一个长度为\(n\)的排列\(a\),定义\(f(n)\)为将一个任意一个长度为\( ...