流是一连流串的字符,是信息的通道,分输出流和输入流。

IO的分类

第一种分:输入流和输出流。

第二种分:字节流和字符流。

第三种分:节点流和处理流。

Java中流的分类:

流的运动方向,可分为输入流和输出流两种。

流的数据类型,可以分为字节流和字符流。

输入流类都是抽象类InputStream(字节输入流)或抽象类Reader类(字符输入流)的子类。

输出流类都是抽象类OutputStream(字节输出流)或抽象类Writer类(字符输出流)的子类。

输入流从文件输入为读取,输出流从文件输出为写入数据。

字节输入流InputStrem和子节输出流OutputStream

InputStream:FileInputStream,ObjectInputStream,ByteArrayInputStream,StringBufferInputStream,BufferedInputStream,DataInputStream

OutputStream:FileOutputStream,ObjectOutputStream,ByteArrayOutputStream,BufferedOutputStream,DataOutputStream

输入流

输入流用于读取数据,用户可以从输入流中读取数据,但不能写入数据。

输入流读取数据过程如下:

(1)打开一个流。

如:FileInputStream inputFile=new FileInputStream("数据源");

(2)从信息源读取信息。

如:inputFile.read();

(3)关闭流。

如:inputFile.close();

输出流

输出流用于写入数据。只能写,不能读。

写数据到输出流过程如下:

(1)打开一个流。

如:FileOutputStream outFile=new FileOutputStream("数据源");

(2)写入信息到目的地。

如:outFile.write(inputFile.read()):

(3)关闭流。

如:outFile.close();

字符流ReaderWriter

字节字符转换流:

InputStreamReader

OutputStreamWriter

加入缓冲流可以加快输入和输出的速度。

FileInputStream fis = new FileInputStream("from.txt");
InputStreamReader isr = new InputStreamReader(fis);
// 可以加快输入和输出的速度
BufferedReader br = new BufferedReader(isr);
FileInputStream fis = new FileInputStream("from.txt");
InputStreamReader isr = new InputStreamReader(fis);
// 可以加快输入和输出的速度
BufferedReader br = new BufferedReader(isr); FileOutputStream fos = new FileOutputStream("from.txt");
OutputStreamWriter osw = new OutputStreamWriter(fos);
// 可以加快输入和输出的速度
BufferedWriter bw = new BufferedWriter(osw);
import java.io.*;
class Test{
public static void main(String[] args){
// 声明输入流
FileInputStream fis = null;
// 声明输出流
FileOutputStream fos = nulll;
try{
// 生成输入流对象
fis = new FileInputStream("e:/from.txt");
// 生成输出流的对象
fos = new FileOutputStream("e:/to.txt");
// 生成字节数组
byte[] buffer = new byte[1024];
while(true){
// 调用输入流对象的read方法
int temp = fis.read(buffer,0,buffer.length);
if(temp == -1){
break;
}
fos.write(buffer,0,temp);
}
}catch(Exception e){
System.out.println(e);
}finally{
try{
fis.close();
fos.close();
}catch(Exception e){
System.out.println(e);
}
}
}
}

字节输入流和字节输出流

Reader FileReader
Writer FileWriter
int read(char[] c, int off, int len)
void write(char[] c, int off, int len)
import java.io.*;
public class Demo{
public static void main(String args[]){
FileReader fr = null; // 字符输入流
FileWriter fw = null;
try{
fr = new FileReader("e:/from.txt"); // 读取的文件路径
fw = new FileWriter("e:/to.txt");
char[] buffer = new char[100];
int temp = fr.read(buffer,0,buffer.length);
fw.write(buffer,0,temp);
//
for(int i = 0; i<buffer.length; i++){
System.out.println(buffer[i];
}
//
}catch(Exception e){
System.out.println(e);
}finally{
try{
fr.close();
fw.close();
}catch(Exception e){
System.out.println(e);
}
}
}
}

装饰者模式

BufferedReader 处理流 字符流 输入流,字符输入处理流。

方法readLine()

import java.io.*;
class Test{
public static void main(String args[]){
FileReader fileReader = null;
BufferedReader bufferedReader = null;
tryl{
fileReader = new FileReader("e:/from.txt");
bufferedReader = new BufferedReader(fileReader);
// readLine() 读取一行数据
String line = bufferedReader.readLine();
System.out.println(line);
//
String line = null;
while(true){
line = bufferedReader.readLine();
if(line == null){
break;
}
System.out.println(line);
}
}catch(Exception e){
System.out.println(e);
}finally{
try{
bufferedReader.close();
fileReader.close();
}catch(Exception e){
System.out.println(e);
}
}
}

工厂模式

interface Student{
public void doWork();
}
class Demo1 implements Student{
public void doWork(){
System.out.println("Demo1");
}
}
class Demo2 implements Student{
public void doWork(){
System.out.println("Demo2");
}
}
class Dashu implements Student{
private Stuent student;
public Dashu(Student student){
this.student = student;
}
public void doWork(){
System.out.println("dashu");
student.doWork();
}
}
class School{
public static void main(String[] args){
//
Demo1 demo1 = new Demo1();
Dashu dashu = new Dashu(demo1);
dashu.doWork();
}
}

IO为输入输出的意思,从外面读取数据用InputStream,向外边写入数据用OutputStreamStream为流,在计算机中一切都是以二进制的字节构成的世界,InputStreamOutputStream来读取二进制,我们看起来会很麻烦,所以有了Reader/Writer的接口,用来处理这些字符流。

FileReader fileReader = new FileReader("e:/from.txt");
BufferedReader bufferedReader = new BufferedReader(fileReader);
String line = bufferedReader.readLine();
try{
FileReader fileReader = new FileReader("e:/from.txt");
BufferedReader bufferedReader = new BufferedReader(fileReader);
String line = null;
while(true){
line = bufferedReader.readLine();
if(line == null){
break;
}
System.out.println(line);
}
}catch(Exception e){
System.out.println(e);
}finally{
try{
bufferedReader.close();
fileReader.close();
}catch(Exception e){
System.out.println(e);
}

增强API - NIO non-blocking IO

Channel Buffer Selector

nio新加的,对线程是非阻塞的作用。

往后余生,唯独有你

简书作者:达叔小生

90后帅气小伙,良好的开发习惯;独立思考的能力;主动并且善于沟通

简书博客: https://www.jianshu.com/u/c785ece603d1

结语

  • 下面我将继续对 其他知识 深入讲解 ,有兴趣可以继续关注
  • 小礼物走一走 or 点赞

第40节:Java中的IO知识案例的更多相关文章

  1. 第76节:Java中的基础知识

    第76节:Java中的基础知识 设置环境,安装操作系统,安装备份,就是镜像,jdk配置环境,eclipse下载解压即可使用,下载tomcat 折佣动态代理解决网站的字符集编码问题 使用request. ...

  2. 第83节:Java中的学生管理系统分页功能

    第83节:Java中的学生管理系统分页功能 分页功能一般可以做成两种,一种是物理分页,另一种是逻辑分页.这两种功能是有各自的特点的,物理分页是查询的时候,对数据库进行访问,只是查一页数据就进行返回,其 ...

  3. 第82节:Java中的学生管理系统

    第82节:Java中的学生管理系统 学生管理系统的删除功能 删除,点击超链接,点击弹出对话框式是否进行删除,如果确定,就删除,超链接执行的是js方法,在js里访问,跳转servlet,,servlet ...

  4. 第80节:Java中的MVC设计模式

    第80节:Java中的MVC设计模式 前言 了解java中的mvc模式.复习以及回顾! 事务,设置自动连接提交关闭. setAutoCommit(false); conn.commit(); conn ...

  5. 第79节:Java中一些要点

    第79节:Java中一些要点 前言 一些知识点忘了没,可以通过一个点引出什么内容呢?做出自己的思维导图,看看自己到了哪一步了呢 内容 如果有人问jre,jdk,jvm是什么,你怎么回答呢? jre的英 ...

  6. 第78节:Java中的网络编程(上)

    第78节:Java中的网络编程(上) 前言 网络编程涉及ip,端口,协议,tcp和udp的了解,和对socket通信的网络细节. 网络编程 OSI开放系统互连 网络编程指IO加网络 TCP/IP模型: ...

  7. 第77节:Java中的事务和数据库连接池和DBUtiles

    第77节:Java中的事务和数据库连接池和DBUtiles 前言 看哭你,字数:8803,承蒙关照,谢谢朋友点赞! 事务 Transaction事务,什么是事务,事务是包含一组操作,这组操作里面包含许 ...

  8. 第71节:Java中HTTP和Servlet

    第71节:Java中HTTP和Servlet 前言 哭着也要看完!!!字数: 学习xml和TomCat 会写xml,看懂xml 解析对象 SAXReader reader = new SAXReade ...

  9. 第68节:Java中的MYSQL运用从小白到大牛

    第68节:Java中的MYSQL运用从小白到大牛 前言 学习java必备要求,学会运用!!! 常见关系化数据库 BootStrap是轻量级开发响应式页面的框架,全局css组件,js插件.栅格系统是将页 ...

随机推荐

  1. visual studio vode 汉化

    在vs code 的商店中搜索Chinese,找到如下模块,安装. 安装后,按下ctrl+shift+p,找到configure display language ,点击进入,修改 改成如图字母就可以 ...

  2. P2024 食物链

    题面:P2024 食物链 emmm其实不太难想 开三倍的数组 1~n:是当前动物的同类 n~2*n:是当前动物吃的动物 2*n~3*n:是吃当前动物的动物 emmmm #include<iost ...

  3. 干货 | PHP就该这么学!

    前段时间和大家一起分享了一篇关于学习方法内容<大牛与搬运工的差距——学习方法的力量>.我们将学习过程分成八步,并借鉴了敏捷开发的迭代思想,以达到自我迭代学习的效果.行胜于言,理论结合实践才 ...

  4. spring.boot 无法加载oracle驱动的可能原因

    .找到本地oracle安装目录下的ojdbc6.jar包,为了方便起见,复制到某盘的根目录(如F盘根目录),在cmd下进入F盘根目录(也就是ojdbc.jar复制的目录),同时我们需要查看ojdbc的 ...

  5. git学习笔记:常用命令总结

    本文根据廖雪峰的博客,记录下自己的学习笔记.主要记录常用的命令,包括仓库初始化.添加文件.提交修改.新建分支.内容暂存.分支管理.标签管理等内容. git是分布式版本控制系统. 首先是安装,从官网下载 ...

  6. VUE 组件通信、传值

    一.通过路由进行带参传值: 两个组件A和B,A组件通过query把orderId传递给B组件(触发事件可以是点击事件.钩子函数等) this.$router.push({path:'/componen ...

  7. 大面积project.pbxproj冲突问题解决

    在团队开发中,经常会有project.pbxproj的冲突出现. 所以我们添加过新的文件后,要及时的提交,养成好习惯.以免出问题. 但是总有一些时候忘记提交出现大面积的冲突,然后把==== <& ...

  8. python -----一个简单的小程序(监控电脑内存,cpu,硬盘)

    一个简单的小程序 用函数实现!~~ 实现: cpu 使用率大于百分之50 时  ,  C 盘容量不足5 G 时, 内存 低于2G 时. 出现以上其中一种情况,发送自动报警邮件! 主要运用 到了两个 模 ...

  9. Java项目下的classpath路径包括哪里

    https://my.oschina.net/zjllovecode/blog/916927 classpath指的是.classpath下kind="src" 的路径

  10. 取消Debian屏保及显示器休眠

    在产品展示场合,屏保及休眠会带来不好的体验,很多时候需要关闭掉. dpms显示器休眠设置: 开启:$ sudo xset dpms 1 1 2取消:$ sudo xset -dpms xset设置屏保 ...