IO流

IO:input、output

流:指的是程序中数据的流动方向

分类:
按流向分:
输入流:从文件到控制台(读取文件中的数据至控制台)
输出流:从控制台到文件(将控制台中的数据存储至文件)

按数据类型分:
**字节流:**使用单个字节进行数据传输(传输数据最基本单位为字节)
字节输入流 InputStream(抽象类)
字节输出流 OutputStream(抽象类)
**字符流:**使用单个字符进行数据传输(传输数据最基本单位为字符)
字符输入流 Reader(抽象类)
字符输出流 Writer(抽象类)
注意:I/O默认按照数据类型分类

流的使用

1、声明操作文件对象(new File(url))

2、创建相应的流(字节、字符、输入、输出流)

3、进相应的操作(读取、写入)

4、关闭流释放资源(输出流需要先进行刷新)

字节流

字节输入流

字节输入流的抽象类: 程序可以从数据源中连续读取字节的对象称为字节输入流,字节输入流的抽象类

方法 描述
public void close() 关闭输入流
public abstract int read() 以数字的方式读取内容
public int read(byte[] b) 将内容读到byte数组中,同时返回读入的个数

字节输出流

OutputStream: 程序可以向数据源中连续写入字节的对象称为字节输出流 ,字节输出流的抽象类

方法 描述
public void close() 关闭输出流
public abstract void write(int b) 在数据流中写入一个字节
public void write(byte[] b,int off,int len) 在数据流中写入一个指定范围的byte数组
public void write(byte[] b) 在数据流中写入一个byte数组
public void flush() 刷新缓冲区

文件字节输入流

FileInputStream:用于读取文件数据的流,继承于字节输入流

构造方法

FileInputStream(File file)

以指定文件对象作为数据源进行数据的读取

FileInputStream(String fileUrl)

以指定文件名创建对象并作为数据源进行读取

常用方法

int read()

每次从数据源中读取一个字节数据,返回读取长度,如果没有下一个要读取数据则返回-1

int read(byte[] b)

每次从数据源读取指定数组长度的数据并存入数组中,返回读取长度,如果没有下一个套读取数据则返回-1

void close()

关闭数据源释放资源

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
//文件字节输入流
//文件中以字节形式读取数据
public class FileInputSreamTest {public static void main(String[] args) throws IOException {// 构造方法// new FileInputStream(file)// 连接指定文件进行流操作// new FileInputStream(name)// 连接指定名称的文件进行流操作// 流的使用// 1创建指定文件File file = new File("F://test/a.txt");// 2创建相应操作流并指定文件FileInputStream fis = new FileInputStream(file);// 3进行相应操作// int read = fis.read();// 读取一个字节,再次执行会向下读取返回指定字符ascii码值 没有则返回-1// (1)fis.read()// 每次读取一个字节数据并返回// 当进行文字读取时,一个文字根据编码不同占用字节不同,会造成乱码// int code=0;// while((code=fis.read())!=-1){//现将读取的数据赋值给变量之后进行判断// System.out.println((char)code);// }//(2)fis.read(byte[]);byte[] b=new byte[1024];int length=0;//每次获取数据的长度while((length=fis.read(b))!=-1){System.out.println(new String(b,0,length));}// 4关闭流释放资源fis.close();}
}

文件字节输出流

FileOutputStream:用于将数据输出至文件的流,继承与字节输出流

构造方法

FileOutputStream(File file)

以指定文件对象作为数据输出源进行数据的写入,覆盖原数据

FileOutputStream(String fileName)

以指定字符串创建文件对象并作为数据输出源进行数据的写入,覆盖原数据

FileOutputStream(File file,boolean bool)

以指定文件对象输入是否进行追加输入,进行数据的写入

FileOutputStream(String fileName,boolean bool)

以指定字符串创建文件对象并输入是否进行追加输入,进行数据的写入

常用方法

void write(int i)

将指定数据以字节形式输出至文件

void write(byte[] b)

将指定字节数组以字节形式输出至文件

void write(byte[] b ,int startindex,int length )

将指定字节数组指定起始位指定长度的字节数据输出至文件

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
//文件字节输出流
//将数据以字节流的形式输出至指定文件
public class FileOutPutStreamTest {public static void main(String[] args) throws Exception {// 构造方法// new FileOutputStream(file,boolean)// new FileOutputStream(url,boolean)// boolean代表是否追加输入// 流的使用// 1创建指定文件File file = new File("F://test/a.txt");// 2创建相应操作流并指定文件FileOutputStream fos = new FileOutputStream(file, true);//false覆盖输入// 3进行相应操作//(1)fos.write(99);//将单个字节写入输出位置文件//(2)fos.write("你好吗".getBytes());//将指定字节数组写入输出文件fos.write("1234567".getBytes(),0,4);//将指定字节数组指定数据索引输出至文件// 4关闭流释放资源fos.flush();//输出流需要先刷新缓冲区(将缓冲区中没来得及输出的数据输出)fos.close();}
}

字节高效流

在创建操作流时额外创建缓冲区,从而提高对数据源的读取与写入速度

(高效流的使用是在字节流基础上添加的缓冲区,所以在使用时人需要创建字节流对象)

高效流提高执行效率的原因

在进行文件读取时,先将数据一部分存储在缓冲区中,在进行获取操作时我们直接从缓冲区获取数据无需直接到数据源进行获取,缓冲区属于内存,执行效率高

高效输入流

BufferedInputStream

构造方法

​ public BufferedInputStream(InputStream in)
​ public BufferedInputStream(InputStream in,int size)
第一种形式的构造方法创建带有32个字节缓冲区的缓冲流
第二种形式的构造方法按照创建了指定大小的缓冲区。

高效输出流

BufferedOutputStream

构造方法

​ public BufferedOutputStream(OutputStream in)
​ public BufferedOutputStream(OutputStream in,int size)
第一种形式的构造方法创建带有32个字节缓冲区的缓冲流
第二种形式的构造方法按指定的大小来创建缓冲区。

使用高效流进行文件复制

 // 高效输入输出流进行文件复制public static void bufferedCopy(String oldFileName, String newFileName) throws IOException {Date d1 = new Date();// 1创建要操作的文件对象File oldFile = new File(oldFileName);// 创建要写入的文件对象File newFile = new File(newFileName);newFile.createNewFile();// 2创建相应的流// 创建文件字节输入流FileInputStream fis = new FileInputStream(oldFile);// 使用文件字节输入流对象创建高效输入流BufferedInputStream bis = new BufferedInputStream(fis,1024);// 创建文件字节输出流FileOutputStream fos = new FileOutputStream(newFile,false);// 使用文件字节输出流对象创建高效输出流BufferedOutputStream bos = new BufferedOutputStream(fos);// 3进行流操作// 创建存储数据的字节数组与每次读取的长度int length = 0;byte[] b = new byte[1024];// 高效输入流循环读取while ((length = bis.read(b)) != -1) {// 使用高效输出流将每次读取的数据输出bos.write(b, 0, length);// 只输出每次读取长度的数据}// 4 关闭流释放资源bis.close();bos.flush();bos.close();Date d2 = new Date();System.out.println("高效字节流进行文件复制:" + (d2.getTime() - d1.getTime()));}

字符流

字符读取流

Reade:以字符形式进行数据源的读取,字符读取流的抽象类

方法 描述
public abstract void close() 关闭输入流
public int read() 读取单个字符
public int read(char[] c) 将内容读取到字符数组中,并返回读取的长度

字符写入流

Writer:以字符形式将数据输出至数据源,字符写入流的抽象类

方法 描述
public abstract void close() 关闭输出流
public void write(String str) 输出字符串
public void write(char[] c) 输出字符数组
public abstract void flush() 强制清空缓存

文件字符读取流

FileReader:用于以字符形式进行文件数据的读取,Reader的子类

构造方法

FileReader(File file)

以指定文件对象创建文件字符读取流

FileReader(String fileName)

先以文件路径创建文件后创建文件字符读取流

常用方法

reader(char[] c)

使用指定字符数组读取数据并存入字符数组,返回实际读取长度,如果没有返回-1

close()

关闭文件字符读取流释放资源

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;//文件字符流读取数据
public class FileReaderTest {public static void main(String[] args) throws Exception {// 构造方法// new FileReader(file)// new FileReader(fileName)File file = new File("f://test/shz.txt");FileReader fr = new FileReader(file);char[] c = new char[50];int length = 0;while ((length = fr.read(c)) != -1) {System.out.print(new String(c, 0, length));}fr.close();}
}

文件字符写入流

FileWriter:将数据以字符形式写入至文件,Writer的子类

构造方法

FileWriter(File file)

以指定文件对象创建文件写入流

FileWriter(String fileName)

以指定文件字符串地址创建文件对象创建文件写入流

FileWriter(File file, boolean append)

以指定文件对象创建文件写入流,输入append进行文件的追加覆写

FileWriter(String fileName,boolean append)

以指定文件字符串地址创建文件对象创建文件写入流,输入append进行文件的追加覆写

常用方法

write(String str);

将指定字符串写入

write(char[] c,int startIndex,int length);

将指定字符串数组由指定索引开始指定长度写入

flush()

刷新缓冲区将数据写入

close()

关闭写入流并释放资源

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;//文件字符写入流写入数据
public class FileWriterTest {public static void main(String[] args) throws Exception {// 构造方法// new FileWriter(file)// new FileWriter(fileName)// new FileWriter(file, append)// new FileWriter(fileName, append)File file = new File("F://test/静夜思.txt");file.createNewFile();FileWriter fw = new FileWriter(file);fw.write("静夜思\r\n");fw.write("李白\r\n");fw.write("床前明月光\r\n");fw.write("疑是地上霜\r\n");fw.write("举头望明月\r\n");fw.write("低头思故乡\r\n");// fw.write(str);// 直接将字符串写入// fw.write(c, 0, length);// 将自定字符数组由指定索引开始指定长度写入fw.flush();fw.close();}
}

字符高效流

提供了缓冲区的对字符进行操作的流

字符高效读取流

BufferedReader
**

方法 类型 描述
public BufferedReader(Reader in) 构造方法 接收Reader类实例
public String readLine() 方法 从缓冲区中读取一行文本
public int read() 方法 读取单个字符
public int read(char[] c,int off,int len) 方法 读取字符数组的一部分

字符高效写入流

BUfferedWriter
**

方法 类型 描述
public BufferedWriter(Writer out) 构造方法 接收Writer类实例
public void newLine() 方法 写入一个行分隔符
public void write(String s,int off,int len)** 方法 写入字符串的一部分

使用字符高效流赋值文档

     // 1创建要操作的文件对象File oldFile = new File("F://test/shz.txt");// 创建要写入的文件对象File newFile = new File("F://test/shz3.txt");newFile.createNewFile();// 2创建相应的流// 创建文件字符读取流FileReader fr = new FileReader(oldFile);// 创建文件高效字符读取流BufferedReader br = new BufferedReader(fr);// 创建文件字符写入流FileWriter fw = new FileWriter(newFile);// 创建文件高效字符写入流BufferedWriter bw = new BufferedWriter(fw);// 3进行流操作// 创建存储数据的字符数组与每次读取的字符串String str = "";while ((str = br.readLine()) != null) {bw.write(str);bw.newLine();//输入换行}// 4 关闭流释放资源br.close();bw.flush();bw.close();

字节流与字符流对比

字符流可以理解为进一步使用的字节流,本质还是字节流,只不过每次进行操作时操作多个字节

字节流 字符流
操作时不会用到缓冲区(内存) 操作时使用了缓冲区(内存)
以字节为单位输入输出数据 以字符为单位输入输出数据
字节流按照8位传输 字符流按照16位传输

lo流讲解 和使用(大纲)相关推荐

  1. lo流知识(字节流 字符流)

    概述:lo流分为字节流字符流 字节流分为:输出流和输入流 输入流:从文件到控制台(把数据从其他设备输到内存中去)读操作 输出流:从控制台到文件(把数据从内存上输出到别的地方)写操作 按数据类型分: 字 ...

  2. ANSYS APDL学习(8):选取全部的封闭曲面生成实体(体积)的命令流讲解

    选取全部的封闭曲面生成实体(体积)的命令流讲解 来源 封闭曲面生成体结果: 应用 背景: GUI步骤 FLST命令 FITEM命令 VA 命令 来源 书籍:< Ansys Mechanical ...

  3. “万字“ Java I/O流讲解

    Java I/O流讲解 每博一文案 谁让你读了这么多书,又知道了双水村以外还有一个大世界,如果从小你就在这个天地里,日出而作,日落而息. 那你现在就会和众乡亲抱同一理想:经过几年的辛劳,像大哥一样娶个 ...

  4. java lo流_javaIO:字节流

    流类 Java的流式输入/输出是建立在四个抽象类的基础上的:InputStream.OutputStream.Reader.Writer.它们用来创建具体的流式子类.尽管程序通过具体子类执行输入/输出 ...

  5. TS流讲解--什么是ts流

    一 从TS流开始 数字电视机顶盒接收到的是一段段的码流,我们称之为TS(Transport Stream,传输流),每个TS流都携带一些信息,如Video.Audio以及我们需要学习的PAT.PMT等 ...

  6. [BZOJ3698]XWW的难题(有源汇上下界最大流+讲解)

    题目: 我是超链接 题解: 建图的话和有源汇可行流一样 求解方法: 在新图上跑ss到tt的最大流(附加源汇) 若新图满流,那么一定存在一种可行流 记此时∑f(s,i)=sum1∑f(s,i)=sum1 ...

  7. Java基础学习总结(13)——流IO

    2019独角兽企业重金招聘Python工程师标准>>> 一.JAVA流式输入/输出原理 流是用来读写数据的,java有一个类叫File,它封装的是文件的文件名,只是内存里面的一个对象 ...

  8. java写入简介_Java关于IO流的介绍

    2.InputStream 和 OutputStream 是两个 abstact 类,对于字节为导向的 stream 都扩展这两个基类; inputStream中的关键方法: read():方法是读取 ...

  9. java中的IO流(超全)(超详解)结合实例轻松掌握

    java进阶之IO流 IO流的概念(大纲): 1.InputStream和OutputStream的继承关系图 2.Reader和Writer的继承关系图 3.文件专属流(加※为重点掌握) ※File ...

最新文章

  1. 10年磨一剑,软件编程走火入魔之:把简单的功能做个彻彻底底、把劳动成果重复利用...
  2. docker可视化管理界面_分析一款Docker容器可视化管理工具Porttainer
  3. 中药ppi网络图太杂乱_太杂乱了吗? 这是您的iPhone,iPad,Android或台式机的15张简约壁纸...
  4. 组态软件基础知识概述
  5. Light oj 1233 - Coin Change (III) (背包优化)
  6. 简述mysql实现递归查询的方法
  7. 计算机开机b00t设置,电脑boot启动项设置的具体方法
  8. 使用机器学习对美股涨跌预测系统的探究
  9. DPDK NFV 性能提升
  10. 字段名的映射的三种方式
  11. 保护眼睛颜色的RGB数值
  12. 基于yolov5的目标检测和单目测距
  13. javascript(String, Array, Math, Date, Object)方法整理
  14. 热烈欢迎两位园友加盟
  15. Proteus仿真-步进电机
  16. 2008年9月3号,星期三,晴。日日行,不怕千万里;常常做,不怕千万事。 ——《格言联璧•处事》
  17. day20.顺序结构 选择结构
  18. ACP相比AWS哪个更具有优势
  19. Python 轻松解决从 K 个字符串数组中任意取一个字符串,按顺序拼接,列出所有可能的字符串组合。(对比用库和不用库的方法)
  20. 普及篇:什么是瀑布模型?

热门文章

  1. 佛祖,你为什么不帮我
  2. 数值计算中的overflow and underflow
  3. 如何破解软件狗,dongle
  4. 无人值守u盘安装linux,U盘无人值守安装Linux操作系统
  5. 软件配置管理岗位职责说明
  6. 在线给程序员出主意:花100万买北京户口,值不值?
  7. (2017中国数字化贡献人物专访)相宜本草:数字化生态转型实现IT部门角色跃迁...
  8. C语言求矩阵的逆(高斯法)
  9. ios根据服务器修改App名称,iOS 修改APP 名称
  10. ESP8266-Arduino编程实例-LIS3MDL磁场传感器驱动