一,字节流
InputStream
OutputStream 两者都是抽象类
InputStream 下的子类 FileInputStream 下的方法 read( )读取字节返回的是 Int类型
因为字节输入流可以操作任意类型的文件,比如图片,音频,这些文件是以二进制形式存在,,如果每次读取都返回Byte,有可能在读时遇到11111111,这在byte类型里是-1,而程序里遇到-1就会停止不读,后面的数据就读不到了 ,因此读取的时候用int类型接受,如11111111会在前面补上24个0,那么byte类型的-1就变成in类型的255了,这样就可以保证数据读完,而结束标记的-1是int类型。
OutputStream 下的子类 FileOutputStream 在创建对象时如果没有这个文件会创建出来,如果有这个文件会将文件清空 用 write( ) 方法续写时需要在 FileOutputStream 对象的第二个参数传入true
int ?=read(byte[ ]) 将读到的字节个数存到数组里,返回的时读取到的有效字节字数
拷贝文件定义小数组:
Close( )方法,关闭前会刷新一次,将数组里残留的字节刷到输出流,刷新后即关闭
Flush( )是刷新方法,每调用一次都会刷新一次,刷新后还可以继续写
简单图片加密:将字节异或一个数即可,异或再异或等于它本身
二.字符流
读的时候将字符转换为字节,写入的时候将字节转换为字符,拷贝文件时不推荐使用字符流操作,一般只进行读或是只进行写操作时用 不可以拷贝非纯文本文件!
BufferedRead,BufferedWrite 里特有的方法,readLine( )一次性读取一行字符串;newLine( )写出回车换行符
流尽量晚开早关,代码示例如下:
装饰设计模式:
递归次数不能过多,否者会造成栈内存溢出 递归举例:
三,其他流
遇到中文乱码如何解决,有以下方法:
1.用字符流
2.用内存输出流 ByteArrayOutputStream 其会在内存中创建自动增长的数组,用完后不需要用close()方法关闭、
序列流 SquenceInputStream 将多个字节输入流整合成一个
随机操作流 RandomAccessFile 既能写也能读
对象操作流 ObjectInputStream/ObjectOutputStream 能够将对象读写入文件
数据操作流 DataInputStream/DataOutputStream 能够根据基本类型的大小读写数据
打印输出流 PrintStream-字节打印流 PrintWrite-字符打印流
Properties 示例代码: