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

26 篇文章 0 订阅

刚在学习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语言里的指针类的东西了吧。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值