(一)IO流基本概念

Java对数据的操作是通过流的方式,io是java中实现输入输出的基础,它可以很方便的完成数据的输入输出操作,Java把不同的输入输出抽象为流,通过流的方式允许Java程序使用相同的方式来访问不同的输入、输出。

(二)文件字节输入流

(2.1)使用输入流的4个基本步骤

1.设定输入流的源。

2.创建指向源的输入流。

3.让输入流读取源中的数据。

4.关闭输入流。

(2.2)构造方法

如果对文件读取需求比较简单,从文件系统中的某个文件中获得输入字节,可以使用文件字节输入流FileInputStream类。

 构造方法:// 通过打开一个到实际文件的连接来创建一个FileInputStream,该文件通过文件系统中的File对象file指定FileInputStream(File file)// 通过打开一个到实际文件的连接来创建一个FileInputStream,该文件通过文件系统中的路径name指定FileInputStream(String name)

(2.2)使用输入流读取文件

int read(byte b[])// 从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b中,返回实际读取的字节数目。到达尾部返回-1.
int read(byte[] b, int off, int len)//将输入流中最多 len 个数据字节读入 byte 数组。返回实际读取的字节数目。到达尾部返回-1。off指定从某个位置开始存取。
long skip()//从源中读取单个字节的数据,该方法返回字节值(0-255),未读取出字节返回-1。
void close()//关闭流

(三)文件字节输出流

(3.1)使用输出流的4个基本步骤

1.设定输出流的目的地。

2.创建指定目的地的输出流。

3.让输出流把数据写入到目的地。

4.关闭输出流。

(3.2)构造方法

如果对文件读取需求比较简单,可以使用==文件字节输出流FileOutputStream类。==字节文件输出流是用于将数据写入到File,从程序中写入到其他位置。

 构造方法:FileOutputStream(File file)// 创建一个向指定File对象表示的文件中写入数据的文件输出流FileOutputStream(File file, boolean append)// 创建一个向指定File对象表示的文件中写入数据的文件输出流FileOutputStream(String name)// 创建一个向具有指定名称的文件中写入数据的输出文件流
FileOutputStream(String name, boolean append)// 创建一个向具有指定name的文件中写入数据的输出文件流

(3.3)使用输出流写字节

字节输出流的write方法以字节为单位向目的地写入单个数据。
void write(int n)输出流调用该方法向目的地写入单个字节。
void write(byte b[])输出流调用该方法向目的地写入一个字节数组。
void write(byte b[],int off,int len)给定字节数组中起始于偏移量off处取len个字节写到目的地。
void close()关闭输出流

(四)文件字符输入、输出流

java中字符流主要由两个基类Reader和Writer,分别对应字符输入流和字符输流。使用字符数组读取数据,即以字符为基本单位处理数据。

Reader的主要方法:

abstract viud close() 关闭流,并且释放该流占用的所有系统资源

**int read() **从流中读取单个字符

**int read(char[] cbuf) **从当前位置读取cbuf.length个字符到cbuf数组中,但实际读取的字符个数取决于流中剩余字符个数。返回值为实际读取的字符个数。

**abstract int read(char[] cbuf, int off, int len)**从当前位置读取len个字符到cbuf中,第一个字符存放在cbuf[off]中,第二个字符存放在cbuf[off+1]中,依次类推。实际读取的字符的个数取决于流中剩余的字符个数,返回值为实际读取的字符个数。

Writer的主要方法:

Writer append(char c) 追加字符c到此Writer流中,追加到尾部。返回值为追加后的此Writer

**Writer append(CharSequence csq) **追加字符序列csq到此Writer流中,追加到尾部,返回值为追加后的此Writer

**Writer append(CharSequence csq,int start,int end) **

追加字符序列csq的子序列到Writer流中,子序列为序列csq的start到end部分,追加到尾部,返回值为追加后的此序列。

**abstract void close()**关闭流,在关闭之前先调用flush()

**void write(String str) **将字符串写入到流中

**void Write(String str, int off, int len) **将字符串str指定位置的子串写入到流中,子串起始位置为off,子串长度为len。

(五)缓冲流

(5.1)缓冲流概述

缓冲流是对文件流处理的一种流,增强了读写文件的能力。够更高效的读写信息。因为缓冲流先将数据缓存起来,然后一起写入或读取出来。

flush() 和 close()

flush 是从缓冲区把文件写出,

close 是将文件从缓冲区内写出并且关闭相应的流。

(5.2)构造方法

BufferedReader 字符输入缓冲流

BufferedReader(Reader in) 创建一个使用默认大小输入缓冲区的缓冲字符输入流。

BufferedReader(Reader in, int sz) 创建一个使用指定大小输入缓冲区的缓冲字符输入流。

BufferedWriter 字符输出缓冲流

BufferedWriter(Writer out) 创建一个使用默认大小输出缓冲区的缓冲字符输出流。

BufferedWriter(Writer out, int sz) 创建一个使用指定大小输出缓冲区的新缓冲字符输出流。

(六)随机流

(6.1)概述

RandomAccessFile类创建的流称作随机流,RandomAccessFile类既不是InputStream类的子类,也不是OutputStream类的子类。当准备对一个文件进行读写操作时,创建一个指向该文件的随机流即可,这样既可以从这个流中读取文件的数据,也可以通过这个流写入数据到文件。

(6.2)构造方法

==RandomAccessFile(File file, String mode) ==参数file是一个File对象,给出创建的流的源,也是流目的地。参数mode取r(只读)或rw(可读写),决定创建的流对文件的访问权力。

RandomAccessFile(String name, String mode): 参数name用来确定一个文件名,给出创建的流的源,也是流的目的地。参数mode取r(只读)或rw(可读写),决定创建的流对文件的访问权力。

(七)数组流

流的源和目的地除了可以是文件,还可以是计算机内存。不需要手动关闭流。只有字节流,没有字符流

字节数组输入流(ByteArrayInputStream)

byte[] src = "IO is easy".getBytes();
InputStream is = new ByteArrayInputStream(src);
byte[] flush = new byte[1024];
int len =-1;
while(len=is.read(flush)!=-1){String str = new String(flush,o,len);System.out.println(str);
}

字节数组输出流(ByteArrayOutputStream)

byte[] dest = null;//其实可以不用,为了风格统一
ByteArrayOutputStream baos = new ByteArrayOutputStream();
String str = "IO is easy";
byte[] datas=str.getBytes();//字符串--->字节数组(编码)
baos.write(datas,0,datas.length);
baos.flush();
dest = baos.toByteArray();//获取数据
System.out.println(dest.length + new String(dest,0,dest.length));

(八)数据流

(8.1)概述

数据输入流DataInputStream允许应用程序以与机器无关方式从底层输入流中读取基本Java数据类型。应用程序可以使用数据输出流写入稍后由数据输入流读取的数据。数据输入流DataInputStream允许应用程序以与机器无关方式从底层输入流中读取基本Java数据类型。应用程序可以使用数据输出流写入稍后由数据输入流读取的数据。

(8.2)代码实现

import java.io.*;
public class text1 {public static void main(String[] args) throws IOException {DataInputStream dis = new DataInputStream(new BufferedInputStream(new FileInputStream("aa.txt")));DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(new FileOutputStream("aa.txt")));dos.writeUTF("行大旺");dos.writeInt(18);dos.writeBoolean(false);dos.writeChar('a');dos.flush();String msg = dis.readUTF();int age = dis.readInt();boolean flag = dis.readBoolean();char ch = dis.readChar();System.out.println(msg);System.out.println(age);System.out.println(flag);System.out.println(ch);dos.close();dis.close();
}
}

(九)对象流

对象流可以将一个对象写出,或者读取一个对象到程序中,也就是执行了序列化和反序列化的操作
序列化将一个对象存放到某种类型的永久存储器上称为保持。如果一个对象可以被存放到磁盘或磁带上,或者可以发送到另外一台机器并存放到存储器或磁盘上,那么这个对象就被称为可保持的。

import java.io.*;
public class text1 implements Serializable{String xing;int age;public text1(){}public text1(String xing,int age){this.xing=xing;this.age=age;}
}

zipfile中怎么关闭流_深入学习JAVA -IO流详解相关推荐

  1. java多线程学习-java.util.concurrent详解

    http://janeky.iteye.com/category/124727 java多线程学习-java.util.concurrent详解(一) Latch/Barrier 博客分类: java ...

  2. java io 缓冲流_记忆系列-Java IO的缓存输入输出流(高效流)

    2019-09-02今天是周一,应该是学校升国旗开学典礼的一天吧~ 然而垃圾的我还是没有找到工作,大专狗是真的没用~简历也不会看你的呀~ 在之前我自己也mark了字节和字符的流,但是呢读取数据量比较大 ...

  3. 01.15_学习Java的day24(详解)

    一.对象IO流 1.什么情况下需要使用对象IO流? Student stu = new Student("小张",89); //想要把这个对象保存到文件中//FileOutputS ...

  4. wget命令详解_嵌入式学习之 Wget 命令详解

    Wget 命令详解 - 理想者1988 - 博客园​www.cnblogs.com 1.下载单个文件:ftp://ftp.denx.de/pub/u-boot/u-boot-2016.09.tar.b ...

  5. python中如何取余_基于python 取余问题(%)详解

    取余的公式: 余数=除数-被除数*商 python的的余数是按照整除(向下取整)得到的商来计算的. 取余问题主要分为 : 正数与正数,负数与负数,正数与负数 ,0 正数与正数 #大数/小数:因为得出的 ...

  6. 02.08_学习Java的day25(详解)

    4.装饰者设计模式 (1)什么是装饰者设计模式? 装饰:在已有的功能上增加额外的功能,并不影响原来的功能. 好比生活中的装饰,服饰的装饰,家里的装饰 (2)代码中如何实现? JDK的核心类库中,已经有 ...

  7. java inputstream 回退_系统学习 Java IO (十)----回退流 PushbackInputStream

    PushbackInputStream 旨在从 InputStream 解析数据时使用. 有时您需要先读取几个字节以查看将要发生的事情,然后才能确定如何解释当前字节, PushbackInputStr ...

  8. java缓存流速度与硬盘_系统学习 Java IO (九)----缓冲流 BufferedInputStream/BufferedOutputStream...

    BufferedInputStream BufferedInputStream 类为输入流提供缓冲. 缓冲可以加快IO的速度. BufferedInputStream 不是一次从网络或磁盘读取一个字节 ...

  9. oracle 监听程序当前无法识别连接描述符中请求的服务_最新版Web服务器项目详解 04 http连接处理(上)...

    点 击 关 注 上 方"两猿社" 设 为"置 顶 或 星 标",干 货 第 一 时 间 送 达. 互 联 网 猿 | 两 猿 社 本文内容 在服务器项目中,http请求的处理与响应至关重要,关系到用户 ...

最新文章

  1. Java 集合 之 房屋出租实例
  2. VB编PiView4注册机
  3. Siri背后语音识别巨头Nuance的衰落
  4. linux pwm测试程序,DM8168 PWM驱动与测试程序
  5. KVM详解(六)——KVM虚拟机快照
  6. NGN学习笔记6——NGN的业务提供技术
  7. 定制C/C++缩进风格
  8. java swing实现抖音上的表白程序
  9. 微信公众号H5 - 使用vue开发微信公众号网页
  10. parallelStream数据丢失问题
  11. 全球与中国光刻机运行现状与发展趋势预测报告2022-2028年
  12. 玩客云 Armbian Linux
  13. 对高维数据进行降维的算法
  14. QT - 创建UDP Socket通信
  15. windows手机改为Android,如何在平板电脑上把windows系统变成安卓系统
  16. 在高德地图 Android SDK上添加GeoServer发布的WMS图层
  17. 如何剪出一个圆形,保存出来还是圆形图片
  18. SAP message no. 04202 用户 xxxx 没有访问计算机 xxx.xxx.xxx.xxx 的权限
  19. 上海大学计算机专业与通信哪个好,选不选上海大学,上大计算机大四提供点信息...
  20. Python黑客攻防(一)屏幕窃取

热门文章

  1. php propel,关于propel--PHP
  2. java html类_java HTML
  3. tensorflow精进之路(十七)——python3网络爬虫(上)
  4. Metabase在linux二次开发编译环境搭建(之一---下载文件)
  5. SharpDevelop 如何切换设计视图和代码视图
  6. TransactionScrope 2
  7. 【Shell脚本学习指南笔记】重定向文件描述符 21
  8. Asp.net中Mysql存储中文乱码解决方法
  9. Oracle 高 Version counts 问题说明
  10. POJ1164 The Castle【DFS】