对于java的IO流的理解很长时间来都是很乱,包括学习其他的语言对这一块知识也都算是一个盲点.更多的时候一提到读取保存数据就是使用数据库。这一次学习了IO流,自己又解决了一个很大的盲点。

IO流为我们提供了这样一种方案,就是把我们的数据保存到文件中,或者从文件中读取我们的数据。IO流为我们提供了一条通道程序,可以使用这条通道把源中的字节序列送到目的地.源可以是文件、网络、压缩包或者其他数据源。

IO流分类

1.      按流的方向分为输入流和输出流

2.      按流的数据单位分为字节流和字符流

3.      按功能分为字节流和处理流

节点流

节点流可以从一特定的数据源读写数据.

处理流

处理流是”连接”在已存在的流(节点流或处理流)之上.为对数据的处理提供更强大的读写功能.

关于节点就和处理流.就好比给了我们一桶水,我们需要一条水管将水引出来,这条水管就是节点流.但是流出来的水我们一看是不太干净,所以我们需要一个净化器,这个净化器就是处理流。

IO流的四大抽象类

InputStream:继承自InputStream的流都是用于向程序中输入数据。且数据的单位为字节(8bit)

outputSteam:与inputStream相似,用来输出数据。

Reader:继承自Reader的流都是用于向程序中输入数据,数据单位为字符(16 bit)

Write:与Reader相似,用于输出数据.

缓冲流

上面的输入输出流一次只能读取一个字节或者字符.如果我有1024个字节要读取,那么我要进行1024次操作。可以想象如果文件十分庞大这样的操作肯定会先很大的问题。基于这种问题,引出了缓冲流的概念。缓冲流就好比在水管后又加了一个水盆。

数据流

当我们需要读取java的一些基本类型的时候,如果使用inputStream和OutputStream会不断的进行转换。比如我们读取一个long类型的值(long类型占8个字节)时,读取很多次。此时数据流就为我们提供了这样一种操作。那就是直接读取这数值。

对象流

对象流就是把一个Object直接转换成字节流写到硬盘上或者网络上.这种操作叫做序列化.

几个小例子

1.第一个例子,演示了FileInputStream和FileOutStream的使用,该例子实现的是将a.txt中的文本复制一份到b.txt中去。

read()方法一次只能读取一个字节。使用当返回值为-1时表示已经读到了文本的末尾。

使用输入输出流要注意异常的处理。此处处理了两个异常

public static void main(String[] args) {

int b=0;

FileInputStream in=null;

FileOutputStream out=null;

try

{

in=new FileInputStream("G:/a.txt");

out =new FileOutputStream("G:/b.txt");

while((b=in.read())!=-1)

{

out.write(b);

}

in.close();

out.close();

}

catch(FileNotFoundException e2)

{

System.out.println("没有发现文件");

System.exit(-1);

}

catch(IOException e1)

{

System.out.println("文件复制错误");

System.exit(-1);

}

System.out.println("文件以复制");

}

2.第二个例子展示了缓冲流的使用 使用缓冲流时readLine()方法一次可以读取一行数据.

此处有个强制类型转换.要注意,不然输出的会是ASCII码.

public static void main(String[] args) {

try

{

FileReader fis=new FileReader("G:/a.txt");

BufferedReader bis=new BufferedReader(fis);

int c=0;

System.out.println(bis.readLine());//读取一行字符串

for(int i=1;i<=3&&(c=bis.read())!=-1;i++)

{

System.out.print((char)c+"");//强制类型转换,不然输出的是ASCII码

}

System.out.println();

bis.close();

}

catch(IOException e)

{

e.printStackTrace();

}

}

总结

IO流的带给了我另一种保存数据的方式,以前保存数据,就只会想到数据库.而现在我们又多了一种新的方式.对于IO流重要的是要理解字节流和处理流这两个概念.字节流负责把数据从数据源提取出来(或者将数据保存到文档中),而处理流是要对数据进行处理,其中有缓冲流,数据流和对象流,针对不同的使用环境我们要甄别使用,处理流可以重叠使用.然后理解了四个抽象类以及他们的方法.掌握了这些对于IO流的理解就算是基本入门了。

java数据通道抽象为流_【java】IO流相关推荐

  1. 黑马毕向东Java课程笔记(day20-1——20-17)IO流:File类及相关方法、递归、递归的相关练习、Properties、PrintWriter类与PrintStream类、合并流与切割流

    1.File类概述   File是文件和目录路径名的抽象表示形式. 用来将文件或者文件夹封装成对象,方便对文件与文件夹的属性信息进行操作.   前面说到的"流",它只能操作数据,想 ...

  2. 【程序员养成之路】Java基础篇 8-流进流出的IO流(二)

    以下内容若有误,欢迎私信我或在下方留言,谢谢^_− 目录 IO流(二) 1.特殊操作流 1.1 标准流 1.2 打印流 1.3 对象序列化流 1.4 Properties 拓展1:比较字节流和字节缓冲 ...

  3. Java基础(二):集合、IO流(Zip压缩输入/输出流等)、File文件类、反射、枚举

    Java基础(一):编译和解释.数据类型.变量作用域.String常用方法.数组.面向对象.异常 Java基础(二):集合.IO流(Zip压缩输入/输出流等).File文件类.反射.枚举 Java异常 ...

  4. 黑马程序员——Java字符流、字节流IO流

    黑马程序员--Java字符流.字节流Io流 ---------------------- <a href="http://www.itheima.com"target=&qu ...

  5. Java中使用try-with-resource优雅的关闭io流

    前言 最近看到一篇关于串流的关闭方法,通过编译器自动生成关闭串流源码,行之有效. 转载自博主: Java劝退师. https://blog.csdn.net/qq_41389354/article/d ...

  6. [重学Java基础][Java IO流][Exter.2]IO流中几种不同的读写方法的区别

    [重学Java基础][Java IO流][Exter.2]IO流中几种不同的读写方法的区别 Read 读入方法 read(): 一般是这种形式 public int read() 1.从流数据中读取的 ...

  7. Educoder–Java高级特性(第一章)- IO流【笔记+参考代码】

    Educoder–Java高级特性(第一章)- IO流[笔记+参考代码] 第一关 1.下列关于字节和字符的说法正确的是(BC) A.字节 = 字符 + 编码 B.字符 = 字节 + 编码 C.字节 = ...

  8. LED升压恒流_降压恒流_升压恒压_降压降压芯片大全可供工程师选型用!

    LED升压恒流_降压恒流_升压恒压_降压降压芯片大全可供工程师选型用! 降压恒流驱动芯片特色降压恒流驱动芯片升压恒流芯片LED背光IC低压输入高压输出降压恒压驱动芯片低压输入降压恒压芯片低压输入降压恒 ...

  9. java io 文件路径_【IO流】java中文件路径(相对路径、绝对路径)相关类及方法...

    1. URL 菜鸟教程:Java URL处理 通常推荐对http等协议进行使用,若操作(file:)部分属性将无意义,建议getFile(). 相关:URLConnections 类 可以打开连接进行 ...

最新文章

  1. Maya创建科幻3D动画循环场景视频教程
  2. Django中html里的分页显示
  3. java能否访问PHP的服务器,PHP与Java进行通信的实现方法
  4. pic单片机低电压检测_pic单片机汇编语言讲解(上)
  5. Cookie和Session简介与区别
  6. 后盾网php多少钱_亿多星全脑开发招代理多少钱@山东聊城网
  7. 继承BaseAdapter自定义ListView
  8. mysql replication 原理_MySQL Replication(复制)基本原理 | 学步园
  9. 斯坦福大学深度学习公开课cs231n学习笔记(2)线性分类器及最优化
  10. 与程序员相关的CPU缓存知识
  11. 分布式优化和去中心化优化概述
  12. Linux C 基于epoll的多人聊天室
  13. 用《只狼》教你学会Git(中)
  14. JRebel激活教程
  15. 微软产品界面配色方案分析
  16. 以空间换时间经典算法
  17. 计算机基础作业2答案,《计算机基础》作业答案 (2)
  18. Gson Builder — Gson Lenient 属性
  19. 利用python修改Excel内容
  20. 安卓蓝牙SCO打开流程

热门文章

  1. yum whatprovides 查找哪个包可以提供缺失的文件
  2. java的并发框架_java并发框架有哪些
  3. oracle exists 变量,Num58 Oracle总结
  4. 学python还是go会php_现在想再学习一门编程语言,应该选择go还是python?
  5. mongodb java 地理位置_Mongodb地理位置索引
  6. 风格化图像_【技术综述】人脸风格化核心技术与数据集总结
  7. java修改状态码_JavaWeb-用过滤器修改请求的返回状态码
  8. java字符_Java String 类
  9. berkeley db mysql_BDB:源自 Berkeley DB,事务型数据库
  10. c语言实验设计报告,C语言实验设计报告.doc