Java学习之I/O流
最近学习了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流相关推荐
- java学习笔记16--I/O流和文件
本文地址:http://www.cnblogs.com/archimedes/p/java-study-note16.html,转载请注明源地址. IO(Input Output)流 IO流用来处理 ...
- Java学习——Day13:IO流
6.1 File类 java.io.File类:文件和文件目录路径的抽象表示形式,与平台无关 File 能新建.删除.重命名文件和目录,但 File 不能访问文件内容本身. 如果需要访问文件内容本身, ...
- java学习笔记-初学IO流
目 录 什么是IO IO流的分类 Java中的IO流 java中需要掌握的流:16个 字节流 java.io.FileInputStream(字节输入流) java.io.FileOutputStre ...
- Java学习系列(十)Java面向对象之I/O流(上)
IO流 我们知道应用程序运行时数据是保存在内存中的,但由于内存中的数据不可持久保存(如断电或程序退出时数据会丢失),因此需要一种手段将数据写入硬盘或读入内存.面向IO流编程就是一种很好的选择.IO:I ...
- Java学习day08--方法引用和Stream流
Java学习day08--方法引用和Stream流 方法引用和Stream流 方法引用 获取Collection.Map.数组流 Stream流的常用操作方法 方法引用和Stream流 1).流思想: ...
- Java学习---Day16_IO流基础篇
Java学习-Day16_IO流基础篇 文件操作 操作磁盘上的某一个文件或某一个文件夹,可以对他们进行创建或删除.移动.属性获取.属性设置等操作.但是,不包含读取文件的内容.拷贝文件 ps:java中 ...
- Java学习之字节流和字符流的转化
Java学习之字节流和字符流的转化 1.字节流转换成字符流 输入字节流转为字符流需要用到InputStreamReader的构造方法: InputStreamReader(InputStream in ...
- Java学习之路9——I/O流框架
一.什么是流 概念:内存与存储设备之间传输数据的通道,内存与磁盘之间的数据交互需要通过流来进行数据传输. 二.流的分类 按方向[重点]: 输入流:将<存储设备>中的内容读入到<内存& ...
- Stoker的Java学习之字节流与字符流
Java学习之字节流与字符流 一. 字节流 字节流是在java.io包中操作文件内容的一大类,字节流将文字图片音频等文件转换成字节,进行数据传输. 在字节流中输出数据主要是使用OutputStream ...
最新文章
- emwin读取sd图片_262.3MB/S读取速率,雷克沙1667X这回谁还敢吐槽
- R语言ggplot2可视化:修改已经创建的ggplot2可视化对象进行自定义的修改、使用ggplot_build函数更改已经创建的可视化结果
- Altium Designer 正反面布元器件
- 通过JQuery获取窗口和元素的宽高
- centos6.x 安装php5.6 tar,CentOs6.x安装php5.6.x Web程序 - 贪吃蛇学院-专业IT技术平台
- 数据采集的大致流程(离线和实时)
- con和com开头单词规律_日语记忆其实很有规律,对于日语初学者你知道这些窍门么...
- 局域网网络流量监控_网工必知:用于监控企业网络的10款最佳工具,拿走!不谢...
- 水管工游戏(代码附带注释)2020.10.6
- latex大斜杠, 除号
- 美国光纤通信展归来:光时代的MPO应用无法抗拒
- Qt获取QTextEdit中的内容
- 卸载asterisk
- JavaSE(二)-抽象类
- Rio手把手教学:如何打造容器化应用程序的一站式部署体验
- Educational Codeforces Round 132 div.2 A-F题解
- Camera_Engine_Rkisp_User_Manual
- 乌鲁木齐疾控中心项目电力监控系统的研究与应用
- 合作共赢,就在2022亚马逊云科技re:Invent全球大会
- cordova编译crosswalk-webview插件报错的处理办法
热门文章
- java mock 数据库_Java-Mock简化单元测试
- weblogic mysql 测试连接表_Weblogic数据库连接池配置
- React 导读(二)
- 爱奇艺2020官方下载_爱奇艺视频如何上传
- 工控一体机在智能工厂的应用
- PHP中SQL注入与跨站攻击的防范
- os.path.exists()对大小写是否敏感的问题
- 【枚举】抽奖2(c++)
- 关于python语言的变量随时_Python中变量的类型是动态的,随时可以变化
- java工具类源码阅读,java学习日记第二天(实用的工具类和源码解析一Arrays)