IO流字节流,字符流,学习笔记 ;基础入门,一看就懂,一篇文章解决字节流好吧
IO流总结而来就时数据的传输,当然有许多方法,杂七杂八的,整理大概也就是字符和字节流
字节流:InputStream和OutputStream是java中可以按照最小字节单位读取的流,即每次读写一个字节,字节流是直接连接到输入源的流。
字符流:是以字符为单位进行数据处理的IO流。本质其实就是基于字节流读取时,去查找指定的码表。
字节流与字符流之间的区别:
1.读写单位不同:字节流式以字节(8位2进制)为单位,字符流是以字符为单位,根据码表映射字符,一次可能读多个字节。
2.处理对象不同:字节流能处理所有类型的数据(如图片、avi等),而字符流只能处理字符类型的数据。
3.一次读入或读出是8位二进制。
4.字符流:一次读入或读出是16位二进制。
结论:只要是纯文本数据优先使用字符流,除此之外都使用字节流。
一 .字节流
- InputStream流,所有输入字节流的父类
首先进入最简单的InputStream读取流,这个流特别简单
首先创建一个字符串
String address = "src/_IO流基础_1/aa.txt";
为什么要先创建一个字符串呢,因为你IO流总不可能时一成不变的,要留有余地
然后直接new一个FileInputStream
FileInputStream input = null;
String address = "src/_IO流基础_1/aa.txt";
try {
input = new FileInputStream(address);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("找不到文件位置!");
}
然后,我们定义一个变量用于保存输出的字节流总数和一个int i
int count = 0 ,i = 0;
接着就是输出就OK了
try {
while((i=input.read())!=-1) { //这里可能会有小伙伴感到迷惑了,实际上就是先给i进行赋值,然后
在去用i是否等于-1,等于-1就没有值了嘛,
System.out.print((char)i); //不了解为什么转化成char的话可以去了解一下ASCII值
}
nput.close();//运行完后关闭资源
System.out.println("传输字节总数:"+count);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("读取文件错误!");
}
总结: 然后,大概这就是InputStream的输入了,获取了地址address,然后输出该txt的值,注意,这个方法只能一个字节一个字节的传输,也就是说,中文字母会乱码,下面有解决办法
-
OutputStream流,所有输出流的父类
这个与第一个InputStream对应,也属于很基础那么首先,我们先来创建一个字符串,用于输出,当然如果你是接着上面来的可以省略 String output ="123123123"; 再创建一个地址,用于保存输出的内容! String address ="src/_IO流基础_1/基础1.txt";//这里注意声明你要保存的格式! 然后,直接new一个FileOutputStream,格式与上面类似 FileOutputStream out = null try { out = new FileOutputStream(out); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } 最后就是直接输出了嘛! char[] shuchu = output.toCharArray();//将字符串转化成数组 int len = shuchu.length; for(int i = 0;i<len;i++) { try { out.write(chuanshu[i]);//用于输出值 } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); System.out.println("传输失败!"); } }
总结 : InputStream和OutputStream可以说是一毛一样,注意两个搭配起来用,获取玩直接输出流保存就OK了
Reader和Writer
这个可以用来传输中文汉字,应为它并不是一个字节一个字节的传输的
直接上代码吧,与上述类似,知识把InputStream换成了Reader ,把OutputStream换成了Writer
import java.io.*;
public class FileReadWriter {
public static void main(String[] args) {
File fi = new File("src/_IO流基础_1/aa.txt");
File fis = new File("src/_IO流基础_1/基础1.txt");
FileReader re = null;
FileWriter wr = null;
try {
re = new FileReader(fi);
wr = new FileWriter(fis);
int k = 0;
while((k = re.read())!=-1) {
wr.write(k);
}
re.close();
wr.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
总结 : 这里就是说我把输入和输出连接到了一起,等于复制了这一个文件,但是这个文件你可以保存任意地点
二 . 缓冲流
下一节下一节,不写了不写了
上一篇: 关于JS效果功能的实现
下一篇: 独家:GWT 2.0即将发布,特性预览