java中的IO流

个人整理文档,恐有错误,请勿盲目参考!

比特(Bit)最小的二进制单位 ,是计算机的操作部分,取值0或者1;

字节(Byte)是计算机操作数据的最小单位由8位bit组成 取值(-128-127);

字符(Char)是用户的可读写的最小单位,在Java里面由16位bit组成 取值(0-65535)。

一个字符=2个字节

IO流主要是用来处理输入输出问题,常用的io流有InputStream,OutputStream,Reader,Writer等。

方法
按照传输的方向可以分字节流(节点流),字节流的父类叫InputStream OutputStream,读写原始数据,一般采用InputStream、OutputStream,节点流就是直接与数据源相连,用于输入或者输出字节输入流InputStream【

InputStream里的read()返回的是所读取的字节的int型(范围0-255),read(byte[] data)将读取的字节储存在这个数组,

返回的就是传入数组参数个数

Read 字节读取字节 字符读取字符

ObjectInputStream【把一个对象写入数据源,把对象动态的写入磁盘中,写入需要实现Serializable接口】

是一个装饰流,装饰流不能直接处理数据源,它必须和其他的装饰流或实体流一起使用,ObjectInputStrea

是用来实现反序列化的。如果你被要求写一段代码读取一个序列化的对象,一般使用哪种Stream?

FilterInputStreamDataInputStream【按照顺序从数据源读入,用来装饰其它输入流,它“允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型”。对各种基本数据类型和String类型的读写】
BufferedInputStream提高读写性能
FileInputStream可以从文件系统中的某个文件中获得输入字节,获取的文件可用性取决于主机环境。

FileInputStream 创建详情,就是怎样的创建不报错,它列出了几种形式!

 
字节输出流OutputStream【

OutputStream里的write()是将指定字节传入数据源,write(byte b[], int off, int len),

Byte b[ ]是byte数组

b[off]是传入的第一个字符

b[off+len-1]是传入的最后的一个字符

len是实际长度

ObjectOutputStream【从一个数据源读出来】

FilterOutputStreamDataOutputStream【把包括基本类型在内的数据和字符串按顺序输出到数据源,对各种基本数据类型和String类型的读写】
BufferedOutputStream提高读写性能
PrintStream【PrintStream类的输出功能非常强大,通常如果需要输出文本内容,都应该将输出流包装成PrintStream后进行输出。它还提供其他两项功能。与其他输出流不同,PrintStream 永远不会抛出 IOException;而是,异常情况仅设置可通过 checkError 方法测试的内部标志。另外,为了自动刷新,可以创建一个 PrintStream】
FileOutputStream
按照传输的单位分字符流,字符流的父类是Reader Writer,字符输入流 Reader

BufferedReader属于处理流中的缓冲流,它可以将读取的内容存在内存里面,它里面有的方法有readLine()方法。处理流就是在节点流的基础上对之进行加工,处理流的构造器必须要 传入节点流的子类,进行一些功能的扩展,它们各有什么用处,处理流的创建有什么特征

对字节流进行大量的从硬盘读取,缓冲流能够减少对硬盘的损伤。

JAVA的IO流用来处理输入输出问题,readLine是BufferedReader里的一个方法,用来读取一行。

InputStreamReader【能指定字符编码】
FileReade【对文本文件操作,该类按字符读取流中数据。】
字符输出流 WriterBufferedWriter【BufferedWriter:将文本写入字符输出流,缓冲各个字符从而提供单个字符,数组和字符串的高效写入。通过write()方法可以将获取到的字符输出,然后通过newLine()进行换行操作。BufferedWriter中的字符流必须通过调用flush方法才能将其刷出去。并且BufferedWriter只能对字符流进行操作。如果要对字节流操作,则使用BufferedInputStream】
Printwriter【需要打印出不同类型的数据到数据源,是最适合的流,可以打印各种数据类型。PrintWriter的println方法自动添加换行,不会抛异常,若关心异常,需要调用checkError方法看是否有异常发生,PrintWriter构造方法可指定参数,实现自动刷新缓存(autoflush);】
处理流OutputStreamWriter【【能指定字符编码】】
FileWriter对文本文件操作

是指数据的传输。输入输出相对于程序,

怎样把我们控制台的输出改成输出到一个文件里面,这个技术叫SetOut(printWriter,printStream)重定向

把输出字节流转换成输出字符流,说出它的步骤使用:

转换处理流OutputStreamWriter 可以将字节流转为字符流

New OutputStreamWriter(new FileOutputStream(File file));

序列化

对象序列化:将对象以二进制的形式保存在硬盘上

反序列化:将二进制的文件转化为对象读取

实现对象序列化需要做哪些工作:实现serializable接口,不想让字段放在硬盘上就加transient

如果在对象序列化的时候不想给一个字段的数据保存在硬盘上面,采用transient关键字。

在实现序列化接口是时候一般要生成一个serialVersionUID字段,它是版本号,目的是要保持版本号的一致 来进行序列化,为了防止序列化出错。

流的打开与关闭:

流一旦打开就必须要关闭,使用close方法,一般将close方法放入finally语句块里面执行比较好,如果是调用的单个处理流就关闭处理流,如果有多个流互相调用传入时关闭就只关闭最外层的流。

IO流读取文件的方式:

使用File对象获取文件路径,通过字符流Reader加入文件,使用字符缓存流BufferedReader处理Reader,再定义一个字符串,循环遍历出文件。代码如下:

File file = new File(“d:/spring.txt”);

try {
Reader reader = new FileReader(file);
BufferedReader buffered = new BufferedReader(reader);
String data = null;
while((data = buffered.readLine())!=null){
System.out.println(data);
}

} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

用io流中的技术,指定一个文件夹的目录,获取此目录下的所有子文件夹路径

序列化的使用场景? 如何实现java序列化?

把一个对象写入数据源或者从一个数据源读出来,使用可序列化,需要实现Serializable接口。

File类型中定义了什么exists方法来判断一个文件是否存在。

File类创建一级目录:

File类的mkdir方法根据抽象路径创建目录;File类的mkdirs方法根据抽象路径创建目录,包括创建必需但不存在的父目录

  1. Java UDP编程主要用到的两个类型是DatagramSocket、 DatagramPacket

初始化交换文件的指令是mkswap;


JDk的实现中,OutPutStream和InputStream类族是通过装饰者模式实现的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

肆〇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值