自定义InputStream里的read()方法

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、ios培训、.Net培训</a>、期待与您
交流!------
通过对IO的学习,我们知道InputStream里面有一个非常使用的方法:read()方法通过学习发现其底层用到了数组,那么思考
到自己定义一个myRead()来达到同样的效果。
代码如下:

import java.io.*;
public class byteCopyMp3 
{
public static void main(String[] args)throws IOException
{
copy_1();
}
public static void copy_1() throws IOException
{
MyBufferedInputStream bufis=new MyBufferedInputStream(new FileInputStream("D:\\KuGou\\张国荣 - 当爱已
成往事【霸王别姬】.mp3"));
BufferedOutputStream bufos=new BufferedOutputStream(new FileOutputStream("d:\\pos.mp3"));
int by=0;
while((by=bufis.myRead())!=-1)
{
bufos.write(by);
}
bufis.myClose();
bufos.close();
}
}
class MyBufferedInputStream
{
private InputStream in;
private byte[] by=new byte[1024];
private int pos=0,count=0;
MyBufferedInputStream(InputStream in)
{
this.in=in;
}
public int myRead() throws IOException
{
if(count==0)
{
count=in.read(by);
if(count<0)
return -1;
pos=0;
byte b=by[pos];
pos++;
count--;
return b;
}
else if(count>0)
{
byte b=by[pos];
pos++;
count--;
return b;
}
return -1;
}
public void myClose()throws IOException
{
in.close();
}

运行结果:
原文件属性:

复制后的文件:

比较发现:原文件比复制后的文件大的多,说明没有复制成功。问题出在哪里呢?
通过查阅资料:原来InputStream里面的read方法封装了一些“&操作”来确保数据的完整性。
虽然代码没有问题,但是我们定义的read方法是Int类型的返回值,但字节数组实际操作的是字节。
如上面的return b;这里的b就是byte类型的。那么将b&255即可,将上面return b替换成return b&255
看结果:
图片
复制完成了!

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、ios培训、.Net培训</a>、期待与您
交流!------

时间: 2025-01-15 00:36:56

自定义InputStream里的read()方法的相关文章

最近开发老遇到莫名其妙的问题,dialog自定义大小,setAttributes这个方法没反应是肿么一回事

============问题描述============ 最近开发老遇到莫名其妙的问题,dialog自定义大小,setAttributes这个方法没反应是肿么一回事,我只想让dialog显示一部分,但是居然全屏占满了,很费解,以前开发都是这样写的,现在居然不可以了 这是dialog的code DownLoaderDialog dialog=new DownLoaderDialog(MainActivity.this,R.style.dialog); Window mwindow=dialog.g

InputStream类的available()方法

InputStream类的available()方法 这个方法可以在读写操作前先得知数据流里有多少个字节可以读取需要注意的是,如果这个方法用在从本地文件读取数据时,一般不会遇到问题,但如果是用于网络操作,就经常会遇到一些麻烦.比如,Socket通讯时,对方明明发来了1000个字节,但是自己的程序调用available()方法却只得到900,或者100,甚至是0,感觉有点莫名其妙,怎么也找不到原因.其实,这是因为网络通讯往往是间断性的,一串字节往往分几批进行发送.本地程序调用available()

java 里面的 native 方法

第一篇: 今天花了两个小时把一份关于什么是Native Method的英文文章好好了读了一遍,以下是我依据原文的理解. 一. 什么是Native Method   简单地讲,一个Native Method就是一个java调用非java代码的接口.一个Native Method是这样一个java的方法:该方法的实现由非java语言实现,比如C.这个特征并非java所特有,很多其它的编程语言都有这一机制,比如在C++中,你可以用extern "C"告知C++编译器去调用一个C的函数.   

自定义适配器视图getview实现方法比较

Android开发之中,listview是一个非常重要的组件,它以列表的形式显示用户的数据,用户可以自由的定义LsitView每一列的内容,样式,很多时候使用ListView都需要使用自定义Adapter,自定义Adapter之中最重要的莫过于getView方法了. getView方法实现主要的三种方法: 1.第一种就是每次都给adapter new一个View载入布局. 例如: public View getView(int position, View convertView, ViewGr

Collections里面的binarySearch方法

------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.ios培训..Net培训</a>.期待与您交流!------ Collections里面的binarySearch方法查阅API发现其返回值类型为:如果搜索键包含在列表中,则返回搜索键的索引:否则返回 (-(插入点) - 1).插入点 被定义为将键插入列表的那一点:即第一个大于此键的元素索引:如果列表中

Android Service生命周期 Service里面的onStartCommand()方法详解

2014-10-21 23:40 32人阅读 评论(0) 收藏 举报 在Demo上,Start一个Service之后,执行顺序:onCreate - > onStartCommand 然后关闭应用,会重新执行上面两步. 但是把代码拷贝到游戏工程发现,关闭游戏后,只执行了onStart,却没有执行onStartCommand! 查找到下面的文章: [plain] view plaincopy Service里面的onStartCommand()方法详解 启动service的时候,onCreate方

我错误的去试图用QList里面的at方法改变const常量的值

在做曲线工厂的程序的时候,我写了一行代码是这样的: AllLines.at(cruveSecions).p1().setY(20); AllLines是QList<QLineF>类型的,cruveSections是int类型的,这里我犯了一个很低级但是很容易犯的错误,我本是图个方便,然后导致AllLines里面的数据老是更新不了,我很纳闷,最后同事通过查API给我找出了错误的原因.是这样的QList里面通过at访问出来的是个常量,里面的值不能修改成功,但是我很纳闷编译器也不报错,我想可能是se

Angularjs $scope 里面的$apply 方法 和 $watch 方法

Angularjs $scope 里面的$apply 方法 和 $watch 方法 学习要点:1. Angularjs $scope 里面的$apply 方法2. Angularjs $scope 里面的$watch 方法 1. Angularjs $scope 里面的$apply 方法$apply 方法作用:Scope 提供$apply 方法传播 Model 的变化$apply 方法使用情景:AngularJS 外部的控制器( DOM 事件.外部的回调函数如 jQuery UI 空间等)调用了

如何在present出来的viewController里使用push方法

MenuViewController * menuViewController = [[MenuViewController alloc] init]; menuViewController.delegate = self; UIViewController * controller = self.view.window.rootViewController; controller.modalPresentationStyle = UIModalPresentationCurrentContex