java 流(二)
来源:互联网 发布:对于网络诈骗如何处理 编辑:程序博客网 时间:2024/06/08 14:09
1、字符流
之前讲过字节流,字节流指的是数据在传输的时候是以字节的形式传输的,而字符流是以字符(双字节)的形式传输的。字符流和字节
流的原理与使用方式都是差不多的,只是底层的读取和传输单位不一样。
2、各种字符流
2.1 输入字符流(各种Reader)
从上面的图中可以看出,和字节流一样,所有的字符流也有一个基类,就是Reader,Reader也提供了一个read方法,不过每一
次读的是char类型。
同样以读取文件为例,来看一下各种Reader的使用
以Reader来读取文件:
public static void main(String args[]) {
File file = new File("C:\\Users\\Administrator\\Desktop\\test.txt");
if(!file.exists()) {
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
Reader reader = null ;
try {
reader = new FileReader(file);
char[] chars = new char[1024];//定义一个够长的字符数组来保存读入的数据
int length = reader.read(chars);//将文件中的数据存到chars里面,返回读取到的字符数
for(int i=0;i<length;i++){
System.out.println(chars[i]);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
以FileReader来读取文件(和Reader没什么不同):try {
reader = new FileReader(file);
char[] chars = new char[1024];//定义一个够长的字符数组来保存读入的数据
int length = reader.read(chars);//将文件中的数据存到chars里面,返回读取到的字符数
for(int i=0;i<length;i++){
System.out.println(chars[i]);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
以BufferedReader来读取,在这个Reader里面提供了以字符串形式读取数据BufferedReader reader = null;
try {
reader = new BufferedReader(new FileReader(file));
System.out.println(reader.readLine());
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
以InputStreamReader来读取数据,这种方式是将字节流转换成字符流,而且可以控制转换时的字符编码: (编码的不同会影响中文的解析,但是并不会影响引文和数字等的解析)
InputStreamReader inputStreamReader = null ;
try {
inputStreamReader = new InputStreamReader(new FileInputStream(file),"gbk");
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
System.out.println(bufferedReader.readLine());
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
2.3 各种Writer Writer的使用可以参考Reader的使用
2.4 BufferWriter和BufferOutputStream的比较
我使用两个文件,来测试两者的写入效率。
File file = new File("C:\\Users\\Administrator\\Desktop\\test.txt");
File file1 = new File("C:\\Users\\Administrator\\Desktop\\test1.txt");
if (!file.exists()) {
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
if(!file1.exists()){
try {
file1.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
BufferedWriter bufferedWriter = null ;
BufferedOutputStream bufferedOutputStream = null ;
try {
byte[] bytes = new byte[1000*1000*500];
for(int i=0;i<bytes.length;i++){
bytes[i] = 12 ;
}
char[] chars = new char[bytes.length/2];
for(int i=0;i<chars.length;i++){
chars[i] = 'a' ;
}
long start = System.currentTimeMillis();
bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(file));
bufferedOutputStream.write(bytes);
bufferedOutputStream.flush();
long end = System.currentTimeMillis();
System.out.println(end-start);
bufferedWriter = new BufferedWriter(new FileWriter(file1));
start = System.currentTimeMillis();
bufferedWriter.write(chars);
bufferedWriter.flush();
end = System.currentTimeMillis();
System.out.println(end-start);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
测试结果显示,当写入数据小时,使用BufferOutStream比使用BufferWriter要快很多,但是当写入数据越来越大是, BufferWriter变得越来越有优势。
0 0
- java 流(二)
- Java中的流(二)
- java------IO流(二)
- Java IO流(二)
- JAVA--IO流(二)
- JAVA--IO流(二)
- java基础整理二十(IO流二)
- Java IO流(二)--字符流
- java IO-输入输出流(二)
- java IO体系结构(二)字符流
- java IO体系结构(二) 字节流
- Java基础知识_IO流(二)
- Java进击(二) I/O流
- Java基础--IO流(二)
- java之IO流详解(二)
- Java IO流详解(二)
- Java基础—IO流(二)
- java IO流解析(二)
- Xcode7.2 测试iOS9.3
- casperjs#实例阅读
- 支持“XXXDbContext”上下文的模型已在数据库创建后发生更改。请考虑使用 Code First 迁移更新数据库(http://go.microsoft.com/fwlink/?LinkId=2
- C#文件搜索
- Binder设计与实现
- java 流(二)
- 20160422 css 字体大小设置
- 常量const详解
- tomcat内存溢出
- Android应用中使用运行时注解
- watchOS 2
- 动画1
- c++第4次作业
- Linux Nginx升级