---------------------- android培训 、java培训 、期待与您交流! ----------------------
打印流:
该流提供了打印方法,可以将各种数据类型的数据都原样打印
字节打印流 :
PrintStream 类
构造函数可以接受的参数类型
1 file对新。 File
2 字符串路径。 String
3 字节输出流。 outputStream
字符打印流:
PrintWriter 类
构造函数可以接受的参数类型 ,当接受的参数为流对象的时候,还可以再设置一个参数
,当这个参数为true时,则println,printf或format方法将刷新输出流缓冲区。
1 file对新。 File
2 字符串路径。 String
3 字节输出流。 outputStream
4 字符输出流。 Wreter
SequenceInput 类 合并流
可以把多个流合成一个流。需要在构造的时候传入Enumeration对象
方法1:
1 创建一个流类型的 vector
2 把需要合成的流放进集合
3 用集合对象的elements();创建一个Enumeration
4 把创建的Enumeration对象 传入到SequenceInput的构造函数里面
方法2: 比方法1效率高
1 创建一个流对象的ArrayList
2 把需要合成的流放进集合
3 用集合的iterator()方法 创建一个Iterator 对象
4 用匿名内部类方式创建一个Enumeration对象 ,重写其方法。
5 把创建的Enumeration对象 传入到SequenceInput构造函数里面
切割文件
方法:
1 创建输入流和要切割的文件建立关联
2 创建零时字节数组存储输入的数据
3 创建循环,每次循环的时候,创建新的输出流,把零时字节数组的里面的内容存到新的文件里面,
记得在循环里面输出流每次都需要关闭。
操作对象的流:
ObjectInputStream
readObject();反序列化
ObjectOutputStream
writeObject(对象); 对对象进行序列化
想要实现序列化的类,必须实现Serializable接口,这个接口没有方法,只是一个标记性接口
静态成员不能序列化
如果非静态成员不想序列化,在成员前面加 transient 关键字
管道流
可以直接连接输入输出流 单线程使用可能死锁,不建议单线程使用
PipedInputStream
PipedOutputStream
PipedInputStream in = new PipedInputStream();
PipedOutputStream out = new PipedOutputStream();
in.connect(out);//连接 输入输出流
RandomAccessFile 类
随机访问文件,自身具备读写的方法
该类不是IO体系中 类,而是字节继承自Object
但是他是IO包中的成员,因为他具备读和写功能,其内部封装了一个数组,而且通过指针对数组元素进行
操作,可以通过getFilePointer获取指针位置。同时可以通过Seek改变指针的位置。
其读和写的原理就是 它内部封装了字节输入流和输入流。
通过构造方法可以看出,该类只能操作文件,且只能按照指定模式
模式
r 只读模式 不会创建文件,会去读取一个已存在的文件,如果文件不存在,则会出现异常
rw 读写模式 如果不存在,会自动创建,如果存在不会覆盖。
rws
rwd
write();写入一个字节;
writeInt(); 可以直接写入int类型
seek(int);调整指针
skipBytes(int ); 忘后跳过指定字节数
public class Test {
public static void main(String[] args) throws IOException {
RandomAccessFile raf = new RandomAccessFile("d:/wenxue/a.txt", "rw");
String s =null;
raf.seek(2);//设置指针位置
while((s=raf.readLine())!=null){
System.out.println(s);
}
raf.write("hhhhhhh".getBytes());
raf.writeInt(35);//写入int类型
raf.close();
}
}
DataInputStream 和DataOutputStream
用于操作基本数据类型的流对象
WreteUTF(String); 使用UTF-8 编码 将一个字符串写入到输出流
readUTF();
注意: 先存的数据先读,后存的数据后读。不然读出的数据不对
ByteArrayInputStream 和ByteArrayOutputStream
用于操作字节数组的流对象,不需要关闭,因为数据都存储在它们内部封装的数组中。即使关闭也可以用
ByteArrayInputStream :在构造的时候需要接受数据源,而且数据源是一个字节数组
ByteArrayOutputStream:在构造的时候不需要接受数据源,因为其内部封装了一个可变床度的字节数组。就是数据目的地
writeTo(OutputStream); 把数据写到输出流中去
字符编码
编码表: 计算机只能识别二进制数据(早期由来是电信号)。为了方便计算机应用,让它识别各个国家的文字
,就用各个国家的文字用数字来表示,并一一对应,形成一张表。这就是编码表。
ASCII: 美国标准信息交换码。 用一个字节的7位表示
ISO8859-1: 拉丁码表、欧洲哦码表。 用一个字节的8位表示
GB2312: 中国的中文编码表。
GBK: 中文编码表升级,融合了更多的中文字符
Unicode: 国际标准吗,融合了多种文字。所有文字都用两个字节来表示,java语言使用的就是unicode
UTF-8: 最多用三个字节来表示一个字符
编码: 字符串变成字节数组
解码: 字节数组变成字符串
public class Test {
public static void main(String[] args) throws IOException {
String s = "你好";
//对s进行GBK编码
byte[] b = s.getBytes("GBK");
//对b进行iso8859-1 解码
String s1=new String(b,"iso8859-1");
//对s1进行iso8859-1再编码
byte[] b1 = s1.getBytes("iso8859-1");
//对b1进行GBK解码
String s2 = new String(b1,"GBK");
System.out.println(s2);
}
}
---------------------- android培训 、java培训 、期待与您交流! ----------------------