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

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. 新手必备的Linux知识

    测试人员为什么学习linux? 对于软件测试人员来说,我们测试的任何产品都是基于操作系统.比如我们每天都在使用的QQ软件,它有windows.ios.Android.Mac OS等版本,需要把QQ安装 ...

  2. python 15 常用模块三 re模块

    一.正则模块 正则表达式(或 RE)是一种小型的.高度专业化的编程语言,(在Python中)它内嵌在Python中,并通过 re 模块实现.正则表达式模式被编译成一系列的字节码,然后由用 C 编写的匹 ...

  3. 4-3 重构发送post请求

    当创建好一个post请求后 怎么测试呢?

  4. 如何在线更新visual studio installer2017

    更新最后100M文件需要开启全局代理才能成功,不然需要等2个小时才能成功!墙太深了..

  5. Java-常用工具方法

    一 Json转换 1 输出组装好的json ObjectMapper mapper = new ObjectMapper(); try { String requiredJson = mapper.w ...

  6. Java学习笔记day_01

    Java学习笔记(复习整理) 虽然不知道该怎么写,但是不起步就永远不知道该怎么做..刚开始可能会写的很差劲,但会一点一点变好的. 本笔记是以我按照传智播客的视频和Java核心思想来学习,前面的基础部分 ...

  7. IOS KVO没有在delloc中移除导致奔溃

    1.背景 为了监听tableview的移动 [_tableView addObserver:self forKeyPath:@"contentOffset" options:NSK ...

  8. 转发对python装饰器的理解

    [Python] 对 Python 装饰器的理解的一些心得分享出来给大家参考   原文  http://blog.csdn.net/sxw3718401/article/details/3951958 ...

  9. ntile函数

    ntile函数可以对序号进行分组处理,将有序分区中的行分发到指定数目的组中. 各个组有编号,编号从一开始. 对于每一个行,ntile 将返回此行所属的组的编号.这就相当于将查询出来的记录集放到指定长度 ...

  10. Forward团队-爬虫豆瓣top250项目-项目总结

    托管平台地址:https://github.com/xyhcq/top250 小组名称:Forward团队 组长:马壮 成员:李志宇.刘子轩.年光宇.邢云淇.张良 我们这次团队项目内容是爬取豆瓣电影T ...