您的位置:首页 > 编程语言 > Java开发

java基础笔记之IO流:

2016-11-23 17:12 323 查看
知识点:

IO流:

概述:用来传输数据的

// 内存和硬盘之间进行数据交互的

分类:

流向:

输入流:读取数据

输出流:写数据

操作:

字节流:可以操作任意类型的数据,但是操作中文可能会出现乱码

字符流:专门用来操作纯文本文件

字节流的常用抽象父类:

InputStream:字节输入流.

继承类:

FileInputStream:

构造方法:

public FileInputStream(String name);

public FileInputStream(File file);

成员方法:

available(); //了解即可. 获取到要读取的文件的 所有字节数

read():一次读一个字节,读不到返回-1,读到就返回对应的码值

read(byte[] bys):一次读一个数组,读不到返回-1,读到就返回有效字节数,返回值:int

FileInputStream fls =newFileInputStream(放一个文件路径(file是一个封装路径的对象));

//int x = fls.read();从硬盘上读取一个字节

一般这样写:

int b;

while((b.read())!=-1){

system.out.println(b);

}

fls.close();关闭释放资源

文件结束标记是-1;

BufferedInputStream(字节缓冲输入流/字节高效输入流):封装的是普通流

OutputStream:字节输出流

继承类:

FileOutputStream:创建对象时,如果没有就会帮我们创建出来,如果有了,就会把文件清空,再写入数据

构造方法: //如果文件不存在,会自动创建.

public FileOutputStream(String name);

public FileOutputStream(File file);

public FileOutputStream(String name,boolean append);//往文件中追加数据

public FileOutputStream(File file,boolean append);

成员方法:

write(int a):

write(byte[] bys);

write(byte[] bys,int index,int len);

BufferedOutputStream: //字节缓冲输出流(字节高效输出流)

代码:

FileOutputStream fos = new FileOutputStream(放文件路径,如果没有就自己创建,boolean append//默认是false,不会在后面追加,只会覆盖,改成true就会续写);//创建字节流输出流对象,没有就自动创建

fos.write(内容);

fos.close()

字节流操作中文的问题:

读取中文: 可能会读取到中文的半个字节,造成乱码.

写出中文: 需要将中文转换成其对应的 字节数组,然后再写出.getbyte()

字符流的常见抽象父类:

Reader:字符输入流

Writer:字符输出流

拷贝图片

定义一个小数组来拷贝文件(推荐) 字节流一次读写一个指定长度的字节数组.

FileInputStream fis = new FileInputStream("ss.jpg");//创建输入流对象,封装的是数据源

FileOutputStream fis = new FileOutputStream("copy.jpg");//创建输出流,封装的的是目的地

byte[] arr = new byte[长度,一般是1024的整数倍];

int len ;

while((len=fis.read(arr))!=-1){//如果忘记加arr,返回的就不是字节个数了,而是字节码的值,

fos.rea(arr,0,len//有效的字节数);

}

fis.close();//关闭释放资源

fos.close()

代码:第一种拷贝

FileInputStream fis = new FileInputStream("ss.jpg");//创建输入流对象

FileOutputStream fis = new FileOutputStream("copy.jpg");//创建输出流

int b;

while((b=fis.read())!=-1){//不断读取每个字节

fos.write(b);//逐个字节拷贝

}

fis.close();//关闭释放资源

fos.close()

//fis.available获取文件大小(不推荐)

IO流的核心代码:
1: 创建输入流对象,封装数据源文件.
2: 创建输出流对象,封装目的地文件.
3: 定义变量,用来记录读取到的内容(或者是有效字节(符)数).
4: 定义循环开始读取,只要条件满足就一直读.
5: 将读取到的内容写入到目的地文件中.
6: 关闭关闭输入流对象和输出流对象.

面试题:

记忆:

1.集合的顶层都是接口,IO流是抽象类

2. 普通流封装的是文件,高效流封装的是普通流

3: 在try(){}格式中,写在小括号中的代码会在大括号中的代码执行完毕后,自动释放.

前提是: 必须实现 AutoCloseable 接口.

1.read()方法读取一个字节,为什么返回int,而不是byte?

防止中间出现11111111(-1的补码),这样的数据,后面的数据就读取不了啦

2: 字节缓冲流的内置缓冲区大小是多少?

8192个字节.

3.close() 和flush() 方法的区别?

* flush()方法:

具备刷新的功能,用来刷新缓冲区的,刷新之后,流对象可以继续使用.

* close()方法:
     * 具备刷新的功能,用来关闭流,释放资源的,在关闭流之前,会刷新一次缓冲区,关闭时候,流对象不可以继续使用.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: