java 流
Posted yuanGrowing
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 流相关的知识,希望对你有一定的参考价值。
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变得越来越有优势。
以上是关于java 流的主要内容,如果未能解决你的问题,请参考以下文章
知网的引文网络工具用法
Latex:章节标题中的引文首先放入目录
关于中世纪的论文的引文,谢啦 要英文的
怎样将endnote中引文输出格式改为gb7714-87
显示引文功能手册
在流分析中使用 Tumbling 窗口 2 小时未按预期输出