最近学习了I/O,按照老规矩写上一篇。

I/O流

什么是I/O流?

流是一种抽象概念,它代表了数据的无结构化传递。按照流的方式进行输入输出,数据被当成无结构的字节序或字符序列。从流中取得数据的操作称为提取操作,而向流中添加数据的操作称为插入操作。用来进行输入输出操作的流就称为IO流。换句话说,IO流就是以流的方式进行输入输出。
----转自百度百科

了解了是那么是I/O流,那么Java的I/O流主要应用的业务场景有哪些?

负责文件上传和下载,包括,文档、音频、视频、图片等都可以使用I/O流进行读和写

缓冲的概念

缓冲其实在我们的日常生活中早已是个常见的名词
看视频卡顿?暂停一下,等视频加载缓冲。
那么缓冲主要发生在哪?
举个例子:
快递:
商家发出----> 送到物流中转站,物流中转站------->分批次发出,一次可以运输好多件快递。------>快递员送货上门
假设,我们没有物流中转站,那么,商家不得不每次有人购买产品都要单独发出,所有的快递也不存在集中运输那么,快递到达我们每个人的手中所需要的时间就不会是短短的3天了。

I/O流中的缓冲

I/O流就是对电脑文件的读和写。计算机通过CPU读取磁盘上的文件数据,一次读取一个字节。但可以加上缓冲的概念,每次读取4kb。提高效率。

  • 字节输入缓冲流:BufferedInputStream()
  • 字节输出缓冲流:BufferedOutputStream()
  • 字符输入缓冲流: BufferedReader()
  • 字符输出缓冲流: BufferedWriter()

I/O的分类
需要注意的是,在Java中I/O的定义是以内存为参照物的。

  • 从磁盘读取数据到内存。:输入流
  • 从内存写入数据到磁盘。:输出流

输入流

从磁盘中读取数据到内存中,将数据展示
输入流可以分为:

  • 字节输入流:FileInputStream()
  • 字符输入流:FileReader()(只适用于纯文本内容)

案例:磁盘上有一个1.txt文件,将1.txt内容读取到java内存中
1、使用字节输入流:FileInputStream和字节输入缓冲流:BufferedInputStream

import java.io.*;public class FileInputStreamDemo {public static void main(String[] args) throws IOException {//1.创建一个file对象File file = new File("d:/Test/1.txt");//2.创建文件字节输入流对象,来操作1.txt文件FileInputStream inputStream = new FileInputStream(file);//3.这个流不具备缓冲的效果,使用缓冲流BufferInputStream为另外一个流提供缓冲功能BufferedInputStream bis = new BufferedInputStream(inputStream);//将inputStream传给BufferInputStream,附魔具有缓冲功能//使用字节缓冲流操作1.txt。//4.创建一个内部缓冲区数组  byte[] 类型的数组//byte[] buf = new byte[4*1024];//4096个字节byte[] buf = new byte[3];//3个字节//缓冲数组是多长,一次就只能读取多少字节。//5.读取数据read()   返回的是字节数。//int readNumber =  bis.read(buf);//6.调用buf数组的输出,展示字符数组//System.out.println(new String(buf,0,readNumber));//String(字节数组,偏移量,取值长度)//偏移量规定了从数组的什么位置开始取值//当字节数过多的时候,字符数组不可能无限大,所以使用循环来多次读取,//后边每一次读取都会覆盖前面的内容int length = -1;//如果length=-1,证明读取到了流的末尾,就停止读取while ((length = bis.read(buf))!= -1){System.out.print(new String(buf,0,length));//打印到控制台}//7.关闭流释放资源inputStream.close();bis.close();}
}

2、使用字符输入流:FileReader和字符输入缓冲流:BufferedReader

import java.io.*;public class Demo1 {public static void main(String[] args) throws IOException {//将c盘下面的aaa文件夹下面的1.txt文件的内容 读取到Java内存中//和字节流一模一样//1.新建一个File对象File file = new File("c:/aaa/1.txt");//2.新建FileReader  对象 字符输入流FileReader fr = new FileReader(file);//3.FileRFeader没有缓冲的效果,可以加上缓冲的效果BufferedReader br = new BufferedReader(fr);//4.字节的缓冲数组 是字节//字符的缓冲数组  是字符char[] cbuf = new char[4];//缓冲区是4个字符//这个方法是用的!!!//5. read(char[] cbuf) 将文件内容读取到字符数组中(缓冲区)int length = -1;  while ((length = br.read(cbuf)) != -1) {//6.将数组展示到控制台System.out.println(new String(cbuf, 0, length));}//7.关闭流br.close();fr.close();}
}

输出流

从内存中输出的数据写到磁盘中,将数据存储
输出流可以分为:

  • 字节输出流:FileOutputStream()
  • 字符输出流:FileWriter()(只适用于纯文本内容)

案例:将字符串内容写到一个.txt文件中
1、使用字节输出流:FileOutputStream和字节输出缓冲流:BufferedOutputStream

import java.io.*;public class FileOutputStreamDemo {public static void main(String[] args) throws IOException {//内存到磁盘,输出流//1.创建一个file对象File file = new File("d:/Test/2.txt");if (!file.exists()){file.createNewFile();}//2.创建流FileOutputStream fos = new FileOutputStream(file);//3.加上缓冲效果BufferedOutputStream bos = new BufferedOutputStream(fos);//4.将字符串转成byteString str = "A接W接A接E接外圈刮接诺克萨斯断头台";byte[] bytes = str.getBytes();//5.将数据写到磁盘中bos.write(bytes);//6.刷新,释放资源bos.flush();bos.close();//BufferedOutputStream要先关闭,后开先关fos.close();}
}

2、使用字符输出流:FileWriter和字符输入缓冲流:BufferedWriter

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;public class Demo1 {public static void main(String[] args) throws IOException {//从内存写入数据到磁盘的文件中File file = new File("c:/aaa/2.txt");FileWriter fw = new FileWriter(file);//加缓冲流BufferedWriter bw = new BufferedWriter(fw);//viod writer(char[] cbuf, int off, int length);String str = "一杯茶,一包烟,一个功能码一天!";//将字符串转为char数组char[] chars = str.toCharArray();//将chars数组中  从0 开始  取3个字符写入到缓冲流中bw.write(chars, 3, 3);bw.close();fw.close();}
}

至此结束

Java学习之I/O流相关推荐

  1. java学习笔记16--I/O流和文件

    本文地址:http://www.cnblogs.com/archimedes/p/java-study-note16.html,转载请注明源地址. IO(Input  Output)流 IO流用来处理 ...

  2. Java学习——Day13:IO流

    6.1 File类 java.io.File类:文件和文件目录路径的抽象表示形式,与平台无关 File 能新建.删除.重命名文件和目录,但 File 不能访问文件内容本身. 如果需要访问文件内容本身, ...

  3. java学习笔记-初学IO流

    目 录 什么是IO IO流的分类 Java中的IO流 java中需要掌握的流:16个 字节流 java.io.FileInputStream(字节输入流) java.io.FileOutputStre ...

  4. Java学习系列(十)Java面向对象之I/O流(上)

    IO流 我们知道应用程序运行时数据是保存在内存中的,但由于内存中的数据不可持久保存(如断电或程序退出时数据会丢失),因此需要一种手段将数据写入硬盘或读入内存.面向IO流编程就是一种很好的选择.IO:I ...

  5. Java学习day08--方法引用和Stream流

    Java学习day08--方法引用和Stream流 方法引用和Stream流 方法引用 获取Collection.Map.数组流 Stream流的常用操作方法 方法引用和Stream流 1).流思想: ...

  6. Java学习---Day16_IO流基础篇

    Java学习-Day16_IO流基础篇 文件操作 操作磁盘上的某一个文件或某一个文件夹,可以对他们进行创建或删除.移动.属性获取.属性设置等操作.但是,不包含读取文件的内容.拷贝文件 ps:java中 ...

  7. Java学习之字节流和字符流的转化

    Java学习之字节流和字符流的转化 1.字节流转换成字符流 输入字节流转为字符流需要用到InputStreamReader的构造方法: InputStreamReader(InputStream in ...

  8. Java学习之路9——I/O流框架

    一.什么是流 概念:内存与存储设备之间传输数据的通道,内存与磁盘之间的数据交互需要通过流来进行数据传输. 二.流的分类 按方向[重点]: 输入流:将<存储设备>中的内容读入到<内存& ...

  9. Stoker的Java学习之字节流与字符流

    Java学习之字节流与字符流 一. 字节流 字节流是在java.io包中操作文件内容的一大类,字节流将文字图片音频等文件转换成字节,进行数据传输. 在字节流中输出数据主要是使用OutputStream ...

最新文章

  1. emwin读取sd图片_262.3MB/S读取速率,雷克沙1667X这回谁还敢吐槽
  2. R语言ggplot2可视化:修改已经创建的ggplot2可视化对象进行自定义的修改、使用ggplot_build函数更改已经创建的可视化结果
  3. Altium Designer 正反面布元器件
  4. 通过JQuery获取窗口和元素的宽高
  5. centos6.x 安装php5.6 tar,CentOs6.x安装php5.6.x Web程序 - 贪吃蛇学院-专业IT技术平台
  6. 数据采集的大致流程(离线和实时)
  7. con和com开头单词规律_日语记忆其实很有规律,对于日语初学者你知道这些窍门么...
  8. 局域网网络流量监控_网工必知:用于监控企业网络的10款最佳工具,拿走!不谢...
  9. 水管工游戏(代码附带注释)2020.10.6
  10. latex大斜杠, 除号
  11. 美国光纤通信展归来:光时代的MPO应用无法抗拒
  12. Qt获取QTextEdit中的内容
  13. 卸载asterisk
  14. JavaSE(二)-抽象类
  15. Rio手把手教学:如何打造容器化应用程序的一站式部署体验
  16. Educational Codeforces Round 132 div.2 A-F题解
  17. Camera_Engine_Rkisp_User_Manual
  18. 乌鲁木齐疾控中心项目电力监控系统的研究与应用
  19. 合作共赢,就在2022亚马逊云科技re:Invent全球大会
  20. cordova编译crosswalk-webview插件报错的处理办法

热门文章

  1. java mock 数据库_Java-Mock简化单元测试
  2. weblogic mysql 测试连接表_Weblogic数据库连接池配置
  3. React 导读(二)
  4. 爱奇艺2020官方下载_爱奇艺视频如何上传
  5. 工控一体机在智能工厂的应用
  6. PHP中SQL注入与跨站攻击的防范
  7. os.path.exists()对大小写是否敏感的问题
  8. 【枚举】抽奖2(c++)
  9. 关于python语言的变量随时_Python中变量的类型是动态的,随时可以变化
  10. java工具类源码阅读,java学习日记第二天(实用的工具类和源码解析一Arrays)