整合两个: SequenceInputStream(InputStream, InputStream)
整合多个: SequenceInputStream(Enumeration)
Enumeration<InputStream> en = v.elements();
创建对象: new ByteArrayOutputStream()
写出数据: write(int), write(byte[])
获取数据: toByteArray()
RandomAccessFile概述
RandomAccessFile类不属于流,是Object类的子类。但它融合了InputStream和OutputStream的功能。
支持对随机访问文件的读取和写入。
B:read(),write(),seek()
序列化 写出: new ObjectOutputStream(OutputStream), writeObject()
反序列化 读取: new ObjectInputStream(InputStream), readObject()
IO流(加上id号)
要写出的对象必须实现Serializable接口才能被序列化 不用必须加id号
什么是数据输入输出流
DataInputStream, DataOutputStream可以按照基本数据类型大小读写数据
例如按Long大小写出一个数字, 写出时该数据占8字节. 读取的时候也可以按照Long类型读取, 一次读取8个字节.
DataOutputStream(OutputStream), writeInt(), writeLong()
DataInputStream(InputStream), readInt(), readLong()
什么是打印流
该流可以很方便的将对象的toString()结果输出, 并且自动加上换行, 而且可以使用自动刷出的模式
System.out就是一个PrintStream, 其默认向控制台输出信息
打印: print(), println()
自动刷出: PrintWriter(OutputStream out, boolean autoFlush, String encoding)
打印流只操作数据目的
.什么是标准输入输出流
System.in是InputStream, 标准输入流, 默认可以从键盘输入读取字节数据
System.out是PrintStream, 标准输出流, 默认可以向Console中输出字符和字节数据
2.修改标准输入输出流
修改输入流: System.setIn(InputStream)
修改输出流: System.setOut(PrintStream)
IO流两种方式实现键盘录入)
A:BufferedReader的readLine方法。
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
B:Scanner
A:Properties的特殊功能
public Object setProperty(String key,String value)
public String getProperty(String key)
public Enumeration<String> stringPropertyNames()
字节流的抽象父类:
InputStream
OutputStream
字符流的抽象父类:
Reader
Writer
read()一次读取一个字节
read()方法读取的是一个字节,为什么返回是int,而不是byte
因为字节输入流可以操作任意类型的文件,比如图片音频等,这些文件底层都是以二进制形式的存储的,如果每次读取都返回byte,有可能在读到中间的时候遇到111111111
那么这11111111是byte类型的-1,我们的程序是遇到-1就会停止不读了,后面的数据就读不到了,所以在读取的时候用int类型接收,如果11111111会在其前面补上
24个0凑足4个字节,那么byte类型的-1就变成int类型的255了这样可以保证整个数据读完,而结束标记的-1就是int类型
write()一次写出一个字节
FileInputStream读取
FileOutputStream写出
int read(byte[] b):一次读取一个字节数组
write(byte[] b):一次写出一个字节数组
available()获取读的文件所有的字节个数
write(byte[] b)
write(byte[] b, int off, int len)写出有效的字节个数
B.BufferedInputStream
BufferedInputStream内置了一个缓冲区(数组)
从BufferedInputStream中读取一个字节时
BufferedOutputStream
BufferedOutputStream也内置了一个缓冲区(数组)
flush()方法
用来刷新缓冲区的,刷新后可以再次写出
close()方法
用来关闭流释放资源的的,如果是带缓冲区的流对象的close()方法,不但会关闭流,还会再关闭流之前刷新缓冲区,关闭后不能再写出
通过API查看Throwable
Error
服务器宕机,数据库崩溃等
Exception
Throwable
Error
Exception
RuntimeException
异常处理的两种方式
a:try…catch…finally
try catch
try catch finally
try finally
b:throws |
|