java中IO流的理解及用法(部分)

java中,我们会经常碰到流这种概念,那么,流到底是什么呢?

 

在文件操作中,我们肯定会碰到inputstream outputstream readerwriter这些非常抽象的类。在我们的计算机世界中,我们的数据对象都可以称作流。比如,我们传文件时,文件可以理解成一种流上传到计算机。下载时,文件也可以理解成一种流。相对程序而言,从程序中向外为outputstream,比如,向文件中写东西。从外部向程序内部传送,则成为inputstream。同理,writer,和reader也是相同的。

 

其中,inputstream outputstream 为字节流,readerwriter为字符流。

 

理解了概念,再来深入点吧。

 

Inputstream的派生类,fileinputstreamOutputStream的派生类,fileoutputstream,都是对文件操作的流。举个简单的例子吧。

File file = new File("D:/hello.txt");

FileInputStream inputStream = new FileInputStream(file);

while(true)

{

int n = inputStream.read();

if(n==0)

{

continue;

}

if (n==-1)

{

break;

}

System.out.println((char)n);//ABCD

}

Read方法,其中,inputstream.read()每次读取一个字节,并且转换为int 型返回。当然,还read也重载了其他方法,inputstream.read(byte[] buff),一次读取buff.length大小的数据,并且存放在buff中。

OutputStream使用不做演示。

 

这两种流已经实现了基本的功能,但是效率相对缓慢,每次读取或者写入都会操作文件。于是,更高效的流便产生了。BufferedInputStreamBufferedOutputStream。他们的内部都会产生一个内部缓冲区,提高了效率。

 

这里,借用别人的例子来说明下内部缓冲区:

你喝水的时候,不会是渴的时候才去饮水机一口一口的喝,而是用杯子接好,一口气喝完。正如文件操作一样,频繁的对文件操作必然会降低效率,BufferedInputStream内部的缓冲区会读取一部分当做储备;

 

举个简单的例子

 

File file = new File("D:/hello.txt");

FileInputStream inputStream = new FileInputStream(file);

BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);

byte[]buff = new byte[1024];

while(true)

{

int n = bufferedInputStream.read(buff);

if(n==0)

{

continue;

}

if (n==-1)

{

break;

}

System.out.println(new String(buff,0,4));//ABCD

}

inputStream.close();

bufferedInputStream.close();

这次,我们用了bufferedinputstream.read(byte[ ]buff]) 这个函数,将数据读取到buff

如果文件很大的话,此方法效率会很高;

 

说完了字节流,现在讲一下字符流,至于怎么理解,那就很简单了。字符流里面是字符为单位的,。。。我们可以将一个字节流转换成字符流。比如,可以将inputstream转换成inputstreamreader

 

举个例子:此例子中,用reader读取了文件中的内容:ABCD.

 

 

File file = new File("D:/hello.txt");

FileInputStream inputStream = new FileInputStream(file);

InputStreamReader reader = new InputStreamReader(inputStream);

while(true)

{

int n = reader.read();

if(n==0)

{

continue;

}

if (n==-1)

{

break;

}

System.out.println((char)n);//ABCD

}

inputStream.close();

 

同样,为了解决效率问题,我们将使用BufferedReader

 

File file = new File("D:/hello.txt");

FileInputStream inputStream = new FileInputStream(file);

InputStreamReader reader = new InputStreamReader(inputStream);

BufferedReader reader2 = new BufferedReader(reader);

char[] buff = new char[1024];

while(true)

{

int n =reader2.read(buff);

if(n==0)

{

continue;

}

if (n==-1)

{

break;

}

System.out.println(new String(buff,0,n)); //ABCD

}

inputStream.close();

 

 

 

你可能感兴趣的:(java中IO流的理解及用法(部分))