IO流

I:input输入(读取),把硬盘中的数据,读取到内存中使用。

O:output输出(写入),把内存中的数据写入到硬盘中。

流:数据(字符,字节)1个字符=2个字节,1个字节=8个二进制位

字节流:InputStream,OutputStream

字符流:Reader,Writer

 

字节流:一切皆为字节,字节流可以传输任意文件数据。

OutputStream:close(),flush(),write(byte[] b),write(byte[],int off,int len),write(int b).

FileOutputStream把内存中的数据写到硬盘的文件中。

InputStream:

写入数据的原理(内存-->硬盘)

java程序-->JVM--->OS--->OS调用写数据的方法--->把数据写入到文件中。

字节输出流的使用步骤:

1.创建一个FileOutputStream对象,构造方法中传递写入数据的目的地。

2.调用对象中write方法,把数据写入到文件中

3.释放资源(流使用会占用一定的内存,使用完毕要把内存清空,提供程序的效率 )

 

构造方法的作用:

1.创建一个FileOutputStream对象。

2.会根据构造方法中传递的文件/文件路径,创建一个空的文件

3.会把FileOutputStream对象指向创建好的文件。

 

任意文件中都是存储的二进制,数据是字节,任意的文本编辑器在打开文件的时候,都会查询编码表,把字节转换为字符表示。0-127:查询ASCII表。其他值查询系统默认码表(中文系统GBK)

FileOutputStream(File file,boolean append),append是否追加。

写换行:window:\r\n linux:/n mac:/r

 

FileInputStream:把文件内容读入到内存。

int read()

int read(byte[] b)

void close()

构造方法:

FileInputStream(String name) //文件路径

FileInputStream(File file) //文件

构造方法的作用:

1.会创建一个FileInputStream对象

2.会把FileINputStream对象指定构造方法中要读取的文件

读取数据的原理(硬盘-->内存)

java程序-->JVM--->OS--->OS读取数据的方法--->读取文件

字节输入流的使用步骤:

1.创建FileInputStream对象,构造方法中绑定要读取的数据源。

2.使用对象中的方法read,读取文件

3.释放资源。

 

循环语句:知道多少次循环用for循环,不知道多少次用while循环。

int len = 0;

while((len = fis.read())!=-1){sout(len)}

-1,说明已经读到文件末尾。

 

文件的复制:

public static void main(String[] args) {

FileInputStream fis = null;

FileOutputStream fos = null;

try {

fis = new FileInputStream("e:\\pl5_1.4.5.apk");

fos = new FileOutputStream("f:\\pl5_1.4.5.apk");

byte[] bytes = new byte[1024];

int len = 0;

while ((len = fis.read(bytes))!=-1){

fos.write(bytes,0,len);

}

fos.flush();

fos.close();

fis.close();

} catch (Exception e) {

e.printStackTrace();

}

}

 

使用字节流读取中文文件:可能不会显示完整的字符,因为一个中文字符可能占用两个字节或多个字节。需要用字符流,以字符为单位读写数据,专门用于处理文本文件。

1个中文

GBK:占用两个字节

utf-8:占用三个字节。

 

字符流:输入流Reader,输出流Writer

 

public void close();关闭此流,并释放与此流相关联的任何系统资源。

public int read();从输入流读取一个字符。

public int read(char[] cbuf);从输入流中读取一些字符,并将它们存储到字符数组cbuf中。

 

FileReader类:构造方法的作用:1.创建一个FileReader对象。2.会把fileReader对象指向要读取的文件。

FileWriter类:构造方法的作用;1.创建一个对象。2.会根据构造方法中传递的文件/文件路径,创建文件。2.会把对象指向创建好的文件。

字符输出流的使用步骤:

1.创建对象,构造方法中绑定要写入数据的目的文件。

2.使用write,把数据写入到内存缓冲区。(字符转换成字节的过程)

3.使用flush,把内存缓冲区的数据刷新到文件中。

4.释放资源。

 

flush和close方法的区别:flush刷新缓冲区,流对象可以继续使用。close先刷新缓冲区,然后通知系统释放资源,流对象不可以再使用。

 

字符流的续写和换行:

续写/追加写FileWriter(String filename,boolean append)

FileWriter(File file,boolean append)

append,续写开关,true不会创建新文件覆盖源文件。false,创建新的文件覆盖源文件。

写换行:window:\r\n linux:/n mac:/r

IO异常的处理:

在jdk1.7前使用try catch finally处理流中的异常。

jdk7新特性:try(定义流对象;定义流对象){} try代码执行完毕,会自动把流对象释放,不用写finally来释放流对象。

在 jdk9新特性:在try前边可以定义流对象,在try()中可以直接引入流对象名称,try代码执行完后,流对象自动释放。

 

字节缓冲流入流:

给基本的字节输入流增加一个缓冲区(数组)提高基本的字节输入流的读取效率。

BufferedInputStream(InputStream is)

BufferedInputStream(InputStream is,int size)

BufferedOutputStream(OutputStream os);

BufferedOutputStream(OutputStream os,int size);

BufferedWriter(Writer writer);

BufferedReader(Reader reader);

特殊的成员方法:

void newLIne();写入一个行分割符,会根据不同的操作系统,获取不同的行分隔符。

String readLine();读取一个文本行。

 

转换流:

字符编码和字符集

编码表:生活中的文字和计算机中的二进制文件进行对应的集合表。

编码:字符--->字节

解码:字节-->字符

InputStreamReader :是字节流通向字符流的桥梁。通过方法的形参,设置各种字符编码。

OutputStreamWriter:是字节流通向字符流的桥梁。通过方法的形参,设置各种字符编码。

OutputStreamWriter(OutputStream out)

OutputStreamWriter(OutputStream out,String charsetName)

InputStreamReader(InputStream in)

InputStreamReader(InputStream in,String charsetName)

 

序列化:

序列化流和反序列化流:

把对象以流的方式保存到文件中,叫写对象,也叫对象的序列化。

对象中包含的不仅仅是字符,使用字节流。

ObjectOutputStream:对象的序列化流。

Person p = new Person("小龙女",18);

writeObject(p);

构造方法:ObjectOutputStream(OutputStream out)

 

把文件中保存的对象,以流的方式读取出来,叫做读对象,也叫做对象的反序列化。

读取的文件保持的都是字节,使用字节流。

ObjectInputStream:对象的反序列化流。

Object obj = (Person)readObject();

 

NotSerializableException

通过java.io.Serializable接口来实现序列化和反序列化。

Serializable接口也叫标记型接口

要进行序列化和反序列化的类必须实现接口,就会给类添加一个标记。

当我们进行序列化和反序列化的时候,就会检测类上是否有这个标记。

有:就可以序列号和反序列化

没有:就会抛出NotSerializableException

 

transient关键字:瞬态关键字,它所修饰的成员变量,不能被序列化。

对象序列化后,此类修改了,反序列化的时候,会报InvalidClassException

 

 

集合的序列化和反序列化。

 

 

打印流:

PrintStream

System.setOut(PrinetStream ps)改变输出语句的目的地。可以打印到文件里面。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值