您的位置:首页 > 编程语言 > Java开发

javaIO流

2016-05-14 19:47 405 查看
utf-16be编码:一个中文两个字节,英文两个字节
utf-8编码:一个中文三个字节,英文一个字节
gbk:一个中文两个个字节,英文一个字节
1、当你的字节序列式某种编码时,这个时候想把字节变成字符串的时候,字符串也要用这种编码,否则会出现乱码
2、文本文件就是字节序列,可以是任意编码的序列。在中文机器上直接建立文本文件,只可以认识ANSI;但是粘贴过来的是认识的。
3、java.IO.File表示文件(目录),只用于表示文件目录的信息(大小名称等),不能用于内容的访问
4、java创建文件夹:File.mkdir();
创建txt文件之类:File.createNewFile();

for(byte b:bytes)

for(int b = 0; b < bytes.length; b++)


这两个循环是一个意思的

1、RandomAccessFile:可以读取文件,写文件;支持随机访问文件(可以访问文件的任意位置)
2、java文件模型:在硬盘上的文件是byte,是数据的集合
打开文件:
"rw"读写;"r"只读
RandomAccessFile fp = new RandomAccessFile(filename, method(“rw” “r”));
里边存在一个文件指针,打开的时候文件指针是从零开始的,pointer = 0;之后随着文件的读取,pointer会增加
写文件:
fp.write(int);一次只可以写一个字节(8位),同时指针指向下一个位置
读文件:
int b = fp.read();读一个字节
文件用完之后要关闭

4、javaIO流(输入流、输出流;又分字节流,字符流)
(1)字节流:
InputStream、OutputStream两个抽象类(父类)
InputStream抽象了应用程序读取数据的方式
OutputStream抽象了应用程序写出数据的方式
2)文件读取结束:
EOF=End 读到-1就读到结尾
3)输入流基本方法:
int b = in.read();读取一个字节,无符号填充到int的低8位,高8位补0,-1是文件结束标志
in.read(byte[] bytes);读取数据直接填写到一个字节数组里边
in.read(byte[] bytes, int start, int size);读取数据放到字节数组里边,从字节数组的start开始,放的数据的大 小是size
4)输出流基本方法:
out.write(int b);写出一个字节到流,写b的低8位(一个int是32位,4个字节)

in.write(byte[] bytes);将缓冲byte数组都写入到流
in.read(byte[] bytes, int start, int size);从字节数组的start开始,大小是size的数据写入到流
5)子类:
FileInputStream——具体实现了文件上读取数据
FileOutputStrean——具体实现了向文件中写数据
DataOutputStream/DataInputStream
对流功能的扩展,可以更加方便的读取int,long,字符等类型的数据。
DataOutputStream

writeInt()/writeDouble()/writeUTF();
DataInputStream
readInt();可以直接读取int类型的数据
BufferedInputStream/BufferedOutputStream
这两个流类为IO提供了带缓冲区的操作,一般打开文件,进行写入或读取操作时,都会加上缓冲,这种模式提供了 IO的性能
FileOutputStream-->一次只操作一个字节
DataOutputStream-->一次操作多个字节
BufferedOutputStream-->把所有的字节都拿出来,进行一次操作
(2)字符流:--->一般操作的是文本文件
1)认识文本和文本文件
java的文本(char)是16位无符号整数,是字符的unicode编码(双字节编码),是byte byte byte……的数据序列
文本文件是文本(char)序列,按照某种编码方案(utf-8 utf-16be gbk)序列化为byte的存储
2)输出流/输入流(Reader Writer)
字符处理,一次处理一个字符
字符的底层仍然是基本的字节序列
3)InputStreamReader 完成byte流解析成char流,按照编码解析
OutputStreamWriter 完成char流到byte流,按照编码处理
FileReader fr = new FileReader("path");
FileWriter fw = new FileWriter("path");
4)字符流的过滤器
BufferedReader ---->readLine一次读一行
BufferedWriter/PrintWriter ----->写一行
(3)对象的序列化和反序列化
1) 将Object转换成byte,叫对象的序列化,反之叫反序列化
2)序列化流(ObjectOutputStream)是过滤------主要方法,writeObject
反序列化流(ObjectInputStream)-----主要方法是,readObject

3)序列化接口(Serializable)
对象必须实现序列化接口才可以进行序列化,否则会出现异常
这个接口没有任何方法,只是一个标准
private transient int age; 不能进行默认的序列化
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: