Java IO输入输出流作业

本文介绍了Java IO流的基本概念和分类,包括字节流和字符流的区别,以及InputStream、OutputStream及其子类的使用场景。还详细讨论了字节流与字符流之间的转化,过滤流的作用,以及Java对文件操作的支持,如File类的功能,文件读写的各种方法。同时,涵盖了对象的序列化和反序列化在Java中的实现。
摘要由CSDN通过智能技术生成

1.Java中流的分类有哪些?

2.字节流InputStream和OutputStream的子类分别有哪些?请举例说明其使用场景。与其对应的字符流分别有哪些?

3.字节流与字符流的转化是怎样的?Java对此提供了哪些支持?

4.Java中的过滤流(流的装配)有什么作用?请举例说明常用的过滤流。

5.什么是对象的序列化和反序列化?Java对此提供了哪些支持?

6.Java的File类表示什么?有什么作用?

7.Java对文件的读写分别提供了哪些支持?

1.Java中流的分类有哪些?

按流方向分类:输入流,输出流

按流内容分类:字符流,字节流

按源头分类:节点流和过滤流

2.字节流InputStream和OutputStream的子类分别有哪些?请举例说明其使用场景。与其对应的字符流分别有哪些?

InputStream:

--字节输入流,FileInputStream(File file) FileInputStream(String file_path)

InputStream is = new FileInputStream(file_path);
//一个个字节读取
int len = 0;
while((len = is.read()) != -1){     //每次读取一个字节,没有就返回-1
    System.out.println((char)len);
}

//按字节数组读取               
byte[] buffer = new byte[1024];

while((len = is.read(buffer)) != -1){      //读取的字节数组放入buffer里面,返回数组的长度len,      
   System.out.println(new String(buffer,0,len));   //有多长就输出多长,防止把遗留的数据输出
}        

--反序列化。ObjectInputStream.


ObjectInputSteram ois = new ObjectInputStream(new FileInputStream(file_path));
Obj obj = (obj)ois.readObject();          //返回一个对象,记得强转

--缓冲输入流。BufferedInputStream. 自带一个8k的缓冲池,效率更高。

InputStream is = new FileInputStream(file_path);
BufferedInputStream bis = new BufferedInputStream(is); //包装成高级的缓冲字节输入流
//方法:bis.read()同上

OutputStream

--字节输出流 FileOutputStream.

OutputStream os = new FileOutputStream(file_path);
os.write(int a);                            //可以输出一个字节
os.write(byte[] buffer,int pos,int len);    //可以输出一个字节数组,从pos开始,长度为len

--序列化 ObjectOutputStream

ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(file_paht));
oos.writeObejct(Object obj); //序列化方法
//序列化的对象要实现序列化接口Serializable

--缓冲输出流 BufferOutputStream

OutputStream os = new FileOutputStream(file_path);
BufferedOutputStream bos = new BufferedOutputStream(os);//包装成高级的缓冲字节输出流
//os.write();方法同上

3.字节流与字符流的转化是怎样的?Java对此提供了哪些支持?

Reader isr = new InputStreamReader(new FileInputStream(String file_path),,String charset);  //字节输入流转化位字符输入流,charset为编码,可以指定,可以默认(一般也不会用)

Writer osw = new OutputStreamWriter(new FileOutputStream(String file_path),String charset)
//字节输出流转化为字符输出流,charset为编码,可以指定可以默认

4.Java中的过滤流(流的装配)有什么作用?请举例说明常用的过滤流。

FilterInputStream 和 FilterOutputStream分别重写了父类InputStream和OutputStream的所有方法,对其他输入输出流进行特殊处理。要使用过滤流,首先必须把它连接到某个输入输出节点流上,通常在构造方法的的参数中指定所要连接的节点流:
FilterInputStream(InputStream in);
FilterOutputStream(Outputstream out);

5.什么是对象的序列化和反序列化?Java对此提供了哪些支持?

序列化:将对象数据直接存储到文件中.

OutputStream os = new FileOutputStream(file_path)
ObjectOutputStream oos = new ObjectOutputStream(os);
//方法:oos.write(Object obj);   

反序列化:将java对象数据从文件中恢复.

InputStream is = new FileInputStream(file_path);    //file_path为文件路径
ObjectInputStream ois = new ObjectInputStream(is);
//方法:obj = ois.readObject();

6.Java的File类表示什么?有什么作用?

File类不仅指系统中的文件,也指目录,因为目录也是特殊的文件。
作用:表示一个文件对象,文件(或目录)路径名字的抽象表示。

7.Java对文件的读写分别提供了哪些支持?

文件类(File)
1.获取文件信息
getName():获取文件名称,返回String
canRead():boolean类型,是否可读
exist()/isFile():boolean类型,是否存在
length():long,文件长度,以字节为单位
getAbsolutePath():文件绝对路径,返回String
getParent():文件父路径,返回String
isDirectory():boolean 是否为目录
isHidden():boolean是否隐藏
lastModified():long,最后修改时间
delete():删除文件
createNewFile():通过实例创建文件

2.文件输入输出流类
1、字节流
InputStream类:是字节输入流的抽象类,所有字节输入流的父类 eg:BufferedInputStream,FileInputStream等。

常用方法:
read():读取数据的下一个字节,返回0~255的int字节值,如果已达到流末尾而没有可用字节,返回-1。
read(byte[] b):输入流读取一定长度的字节,并以整数形式返回字节数。
close():关闭流。

OutputStream类:是字节输出流的抽象类,所有字节输出流的父类 eg:BufferedOutputStream,FileOutputStream等。

常用方法:
write(int b):将指定字节写入输出流。
write(byte[] b):将b个字节从指定byte数组写入此流。
write(byte[] b,int off,int len):将指定byte数组中从偏移量off开始len个字节写入流。
flush():彻底完成输出并清空缓存区。
close():关闭流。
BufferedInputStream、BufferedOutputStream:带缓存的输入输出流。
FileInputStream:以字节流方式读取,FileOutputStream以字节流方式写入。
2、字符流

Java为支持文件的读写引入Reader和Writer两个类。

Reader类:是字符流输入流的抽象类,所有字符输入流的父类 eg:BufferedReader,InputStreamReader,FileReader等。

Writer类:是字符流输出的抽象类,所有字符输出流的父类 eg:BufferedWriter,OutputStreamWriter,FileWriter等

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值