JavaSE—IO流(一)

简介: JavaSE—IO流(一)

Java流的原理

一般在Java对数据的输出和输入是通过流(stream)来进行操作。

image.png



J2SDK提供了各种各样的“流”类,用以获取不同种类的数据:程序中通过标准的方法输入或输出数据


🌲🌲🌲🌲🌲🌲🌲🌲🌲🌲🌲🌲🌲🌲分割线🌲🌲🌲🌲🌲🌲🌲🌲🌲🌲🌲🌲🌲🌲


流的分类

通过流的在不同的角度可以把流分为很几种类型。


按数据流的方向不同可以分为输入流和输出流


按照处理数据单位不同可以分为字节流和字符流


按照功能不同可以分为节点流和处理流


什么是输入流和输出流?

用一个通道一端链接文件,一端连接程序,读取文件的话,则认为这通道是输出流还是输入流呢?


站在文件的角度是输出流。


站在程序的角度是输入流。


J2SDK所提供的所有流类型位于包 Java.io内,都分别继承自以下四种抽象流类型。


输入流:InputStream (字节流),Reader (字符流)


输出流: OutPutStream (字节流), Writer (字符流)

image.png



这四个类都是抽象类,可以把这四个类想象成四根不同的管道。一端接着你的程序,另一端接着数据


源,你可以通过输出管道从数据源里面往外读数据,也可以通过输入管道往数据源里面输入数据,总


之,通过这四根管道可以让数据流进来和流出去。


字节流和字符流

按照内存我们能知道字节流是8(bit),字符流是16(bit)。


字节流就是通过一个字节一个字节的读取,字符流则是通过字符读取。一般情况下,一个字符是两个字节。


补充:


1.对于文本文件(.txt,.c,.java,.cpp),使用字符串处理。


2.对于非文本文件(.jpg,.mp3,.mp4,.avi,.doc,.ppt),使用字节流处理。


节点流和处理流

概念:


节点流:节点流可以是从一个特定的数据源读取写入数据。


处理流:处理流是链接在已经存在的节点流或者处理流之上,通过对数据的处理为程序提供更强大的读写功能!


节点流:

image.png



处理流:


image.png


注:一般处理流比节点流的效率快,但是并不是处理流越多越好。


节点流类型

类型 字符流 字节流

File(文件)  

Memory,Array CharArrayReader、CharArrayWriter ByteArrayInputStream、ByteArrayOutputStream

Memory,String StringReader、StringWriter --------

Pipe(管道) PipedReader、PipedWriter PipedInputStream、PipedOutputStream

节点流就是一根管道直接插到数据源上面,直接读数据源里面的数据,或者是直接往数据源里面写入数据。典型的节点流是文件流:文件的字节输入流(FileInputStream),文件的字节输出流(FileOutputStream),文件的字符输入流(FileReader),文件的字符输出流(FileWriter)。


处理流类型

处理类型 字符流 字节流

Buffffering BufffferedReader、BufffferedWriter BufffferedInputStream、BufffferedOutputStream

Filtering FilterReader、FilterWriter FilterInputStream,FilterOutputStream

Converting between,bytes and chaacter InputStreamReader、OutputStreamWriter ----------

Object Serialization -------- ObjectInputStream、ObjectOutputStream

Data conversion ---------- DataInputStream、DataOutputStream

Counting LineNumberReader LineNumberInputStream

Peeking ahead PusbackReader PushbackInputStream

Printing PrintWriter PrintStream

处理流是包在别的流上面的流,相当于是包到别的管道上面的管道。


🌲🌲🌲🌲🌲🌲🌲🌲🌲🌲🌲🌲🌲🌲分割线🌲🌲🌲🌲🌲🌲🌲🌲🌲🌲🌲🌲🌲🌲


InputStream

InputStream的基本使用

通过对源码的分析我们能知道inputStream的一些功能函数的作用和使用方法。


1.


int read() throws IOException


读取一个字节并以整数的形式返回(0~255),如果返回-1就说明已经到了输入流的末尾。


2.


int read(byte[] buffer) throws IOException


读取一系列字节并存储到一个数组buffer ,返回实际读取的字节数,如果读取前已到输入流的末尾,则返回-1。


3.


int read(byte[] buffer,int offset,int length) throws IOException


读取length个字节


并存储到一个字节数组buffer,从length位置开始


返回实际读取的字节数,如果读取前以到输入流的末尾返回-1.


4.


void close() throws IOException


关闭流释放内存资源 .


5.


long skip(long n) throws IOException


跳过n个字节不读,返回实际跳过的字节数


方法1和方法2的区别


方法1中的read()就是表示一个个字节的读取,而方法2中的read(buffer)则是先把一定长度的字节放在buffer的数组里面然后在读取。这就好比用不同大小的桶来进行取水。


案例

【演示:使用 FileInputStream 流来读取 FileInputStream.java 文件的内容】


import java.io.IOException;
public class zj_bit {
    public static void main(String[] args) throws IOException {
        FileInputStream fileInputStream = null;
        try {
            String pathName ="E:\\IO-stream\\src\\ceshi.TXT";
            File file = new File(pathName);
            fileInputStream = new FileInputStream(file);
            byte[] buffer = new byte[100];
            int len ;
            while ( (len = fileInputStream.read(buffer)) != -1 ){
                String print = new String(buffer,0,len);
                System.out.println(print);
            }
        } finally {
            fileInputStream.close();
        }
    }
}



结果:

hello铁甲小宝//输出出来的文本内容。



目录
相关文章
|
4月前
|
存储 缓存 Java
JavaSE—IO流 ( 八千字带你快速深入理解IO流体系 )(二)
JavaSE—IO流 ( 八千字带你快速深入理解IO流体系 )(二)
|
4月前
|
存储 Java
JavaSE—IO流 ( 八千字带你快速深入理解IO流体系 )(一)
JavaSE—IO流 ( 八千字带你快速深入理解IO流体系 )(一)
|
4月前
|
存储 缓存 Java
JavaSE—IO流之字符流与字节流
JavaSE—IO流之字符流与字节流
|
6月前
|
存储 Java
JavaSE基础精选-IO流
JavaSE基础精选-IO流
42 0
|
6月前
|
存储 编解码 移动开发
【Java】JavaSE的IO流操作
【Java】JavaSE的IO流操作
79 0
|
存储 移动开发 Java
【JavaSE】Java基础语法(三十六):File & IO流
1. File java.io.File类是文件和目录路径名的抽象表示形式,主要用于文件和目录的创建、查找和删除等操作。
JavaSE:第十二章:IO流
JavaSE:第十二章:IO流
JavaSE:第十二章:IO流
|
存储 Java
【JavaSE】文件操作篇(一)文件基础操作与IO流原理及分类
文章目录 1 文件 1.1 文件流 1.2 常用的文件操作 2 IO流原理及流的分类 2.1 IO流原理 2.2 流的分类 写在最后
【JavaSE】文件操作篇(一)文件基础操作与IO流原理及分类
|
存储 缓存 移动开发
【JavaSE】之IO流(下)
【JavaSE】之IO流(下)
|
存储 移动开发 Java
【JavaSE】之IO流(上)
【JavaSE】之IO流(上)