Java的InputStream和OutPutStream流输入与输出体会

来源:互联网 发布:js 设置radio checked 编辑:程序博客网 时间:2024/05/19 02:21

刚在学习Android时,看到拷贝的语句觉得很奇怪,

public void CopyDB(InputStream inputStream,OutputStream outputStream)throws IOException
{
byte[] buffer=new byte[1024];
int length;
while((length=inputStream.read(buffer))>0)
{
outputStream.write(buffer,0,length);
}
inputStream.close();
outputStream.close();
}
因为在引用时,使用的语句是
CopyDB(getBaseContext(),getAssets().open("mydb"),new FileOutputStream(dirPtah+"/MyDB")
总是看不明白为啥第二个参数里使用的是FileOutputStream而方法里参数是OutputStream呢?不是不一样吗?
学习了《Think in Java》后才知道,原来这叫做上溯造型,OutputStream是FileOutputStream的抽象基本类,不能用new,而FileOutputStream创建的句柄都可以使用OutputStream,然而他们就是通用的……
终于体会到一点Java的字节流和字符流的强大,都是继承于OutputStream/InputStream以及Reader/Writer,后面类可以上溯造型很多接口就可以通用了。

至于while里面的语句,还是要学习一下的。read的一个构造函数是这样的:
public int read(byte[] buffer) throws IOException
它的返回值是int,返回当前buffer里实际读取的字节数,如果并未读取到数据,就会返回-1。
至于write的它的构造函数中一种形式是:
public void write(byte[] buffer,int offset,int count) throws IOException
它会把buffer里从offset起数量为count的数据写入到对象里。
还有一个需要理解的是,使用read后,buffer里是有数据的(前提是还没写完),被write后,buffer里就空了,这才能使while形成一个循环。这里再往下可能就要理解到类似于C语言里的指针类的东西了吧。


阅读全文
0 0
原创粉丝点击