---------------------- android培训、java培训、期待与您交流! ----------------------
IO技术总结
IO-->Input+Output的简写
IO流用来处理设备之间的传输Java对数据的操作是通过流的方式
流按照操作数据分为两种:字节流和字符流
unicode码表无论什么字符都是两个字节
utf-8码表优化了unicode码表一个字符对应三个字节
字节流--其中无论什么数据字节流都可以读取
字符流--为了能识别很多的中文和其他字符
流按流向分为:输入流和输出流
-->在一台机器上存储一串字符使用GBK编码而又在另一台机器上读取这个
字符串然后本机的编码是UTF-8那么就会出现乱码这时候就要用字符流去写
去读
==========================================================
字节流的抽象基类:
InputStream,OutputStream
字符流的抽象基类:
Reader,Writer
注意:由四个基类派伸出来的子雷鸣的都是由其父类作为子类名的后缀
IO体系:
字符流:(既然IO流用于操作数据那么数据的最常见的体现形式是
文件)
FileWriter fiw=new FileWriter("");
fiw.write("文本数据");//将数据写入到六种
fiw.flush();//将数据数据刷到目的地中
fiw.close();//关闭流资源但是关闭之前会刷新一次
内部的缓冲数据
/*
close和flush的区别:flush刷新后流可以继续使用
close刷新后会将流关闭。
*/
FileWriter fiw=new FileWriter("1.txt",true);//这个
构造函数是不覆盖原有文件在源文件后面追加数
据
-->Java本身不能去往硬盘去写数据索所以Java靠系统内部的方式来完成数
据的书写这些方式都是在使用windows的资源在使用完后要释放数来所以
Java一定要使用close方法来释放资源
//字符流都有编码格式:默认的编码格式
//windows简体中文版默认是GBK所以字符流都有编码格式也是GBK
FileReader fr=new FileReader("1.txt");
//要保证要读取的文件存在否则会抛出异常
//int ch=fr,read();//一次读一个字符而且会自动往下读取到达末
尾会返回-1
while((ch=fr.read())!=-1){
System.out.println((char)ch);
}
********************************************
//通过第二种方式通过字符数组进行读取
FileReader fr=new FileReader("1.txt");
//定义一个字符数组用于储存独到的字符;
//char[] buffer=new char[10];
//int num=br.read(buffer)//此方法如果督导文件最后一个字符也会
把上一次读到的剩下9个字符也打印出来(此处在以前是我再学习
遇到的一个小坎困扰了很长时间)
所以上面的部分代码改为一下:
int num=0;
char[] buffer=new char[1024];//一次读取1KB的字符
while((num=fr.read(buffer))!=-1){
System.out.println(new String(buffer,0,num));
}
----------------------------------其实IO中的对象的大部分方法跟上面类似
下面制作简单的介绍
BufferedReader br=new BufferreReader();
BufferedWriter br=new BufferedWriter();
由Reader类拓展而来提供通用的缓冲方式读取而且提供了很实用的
readLine读取分行文本很适合
/*
BufferedReader(Reader in)
创建一个使用默认大小输入缓冲区的缓冲字符输入流
BufferedWriter(Writer out)
创建一个使用默认大小输出缓冲区的缓冲字符输出流
*/
例如: BufferedReader br=new BufferedReader(new ileReader(""));
将一个文本文件先将一定量的字符放在缓冲区中
BufferedWriter bw=new BufferedWriter(new FileWriter(""));
将存在缓冲区中的数据在批量取过来
BufferedReader br = new BufferedReader(new
InputStreamReader(new FileInputStream("ming.txt")));
String data = null;
while((data = br.readLine())!=null)
{
System.out.println(data);
}
----------------------------------------------------------------
转换流:字节流+编码表。
InputStreamReader:字节-->字符
OutputStreamWriter: 字符-->字节
/*
这个很重要
*/
讲一个字节流通过自动编码转换成一个字符流打印输出等
用法:InputStreamReader in=new InputStreamReader(new
FileInputStream("1.txt"));
OutputStreamWriter out=new OutputStreamWriter(new
FileOutputStream("2.txt"));
int len=0;
while((len=in.read())!=-1){
out.write((char)len);
}
in.close();
out.close();
----------------------------------字节流:---------------------------
**字节流就是二进制流计算机的数据都是用二进制来表示
处理任何数据都可以用字节流
FileOutputStream//文件输出流
FileInputStream//文件输入流
FileInputStream fis=new FileInputStream("1.txt");
FileOutputStream fos=new FileOutputStream("12.txt");
byte[] buffer=new byte[1024];
int num;
while((num=fis.read(buffer))!=-1){
//System.out.println(new String(buffer,0,num));
fos.write(buffer, 0, num);
}
fis.close();
fos.close();
---------------------------------------------------------------------
//字节流缓冲区类似于字符流缓冲区需要人工编码
BufferedInputStream
BufferedOutputStream
例子:-->加快了留在读数据和取数据的速度
BufferedInputStream in=new BufferedInputStream(new
FileInputStream("1.txt"));
BufferedOutputStream out=new BufferedOutputStream(new
FileOutputStream("100.txt"));
int len;
while((len=in.read())!=-1){
out.write(len);
}
in.close();
out.close();
-------------------------------------------------------------------------
打印流
PrintStream
PrintStream(OutputStream out, boolean
autoFlush)
PrintWriter pw=new printWriter(OutputStrea
out,true);
PrintWriter(OutputStream out, boolean
autoFlush)
//这两个对象操作的效果如出一辙但是PrintStream
主要是用来操作字节流而printwriter是用来操作字
符流
而且用PrintWriter对象的println(Object obj)是自动
清空缓冲区+加换行
----------------------------------------------------------------
================================================================
流对象很多在平时的开发当中到底用哪一个
流对象的才操作规律:
四个明确组成:
1明确 源和目的
源:读入inputStream Reader
目的:outputStream Writer
2.明确数据内容是否是纯文本:
是:reader
不是:InputStream
3.明确数据所在设备
源设备
硬盘:File流
内存:数组 byteArrayInputStream
键盘:System.in
网络:Scoket
目的设备:
硬盘:File流
内存:数组 byteArrayOutputStream
显示(控制台):System.out
网络:Scoket
4.额外功能
1.高效:Buffer
2.转换
3.对象序列化 ObjectInputStream ObjectOutputstream
4.保证数据的表现形式 DataInputStream DataOutputStream
write(int)//将int的最低位写入
writeInt(int)//将int的四个字节全部写入
---------------------- android培训、java培训、期待与您交流! ---------------------- 详细请查看:http://edu.csdn.net/heima