------------- android培训、java培训、java学习型技术博客、期待与您交流! ------------
自定义字节缓冲区之拷贝一个MP3的思路
模仿一个字节缓冲区
首先需要想到的应该InutStram对象
一次读一个字节,由于是要加入缓冲,所以我们只需要将值存在数组中
然后再借由BufferedInputStram来读取他,接着写入,
此时,假设MP3里有5000000000 B的数据要写入,那么我们需要设一个字节数组
一次存1024个字节,然后缓冲区里是从这个1024个数组里面慢慢的取出数据,然后
当1024被取到0的时候,再从MP3文件里取字节到数组里。由此循环
那么,我们需要一个变量来计数这个字节数组是不是==0,如果次数等于0的话,就往里面装数据。还需要一个指针变量,因为取完了 指针需要返回0;也就是从数组第0个下标开始取值。
BufferedInputStream
public
class
MyBufInputSteam{
privateInputSream
in;
privatebyte
buf []
=
byte[
1024];
//定义一个缓冲数组
privateint
post
=
0;
//指针变量
private
int
count
=
0;
//计数变量
public
int
MyRead()
throws
IOException{
if(
count
==
0){
//第一次从数组里存值进去,那么计数肯定是0的情况下
//它会往里面存
count
=
in.
read(
buf);
//这步就是存的步骤
if(
count
<
0){
//那么一直取到没有值的时候,为了符合规则 返回来-1;
return
-1;
}
pos
=
0;
//每次存进来值以后,指针需要清零
byte
b
=
buf[
pos];
//每次只取一个
count
--;
//用来计数取了多少次;
pos
++;
//那么指针是要++的; 当它加到1024的时候, 那么指针需要从新开始
return
b
&
0xff;
//因为是字节,如果字节等于-1的话,会被直接给返回去
//为了避免这情况的发生,所以将字节提升成int
//int会自动保留后8位的数。
}
else
if(
count
>
0){
byte
b
=
buf[
pos];
count
--;
pos
++;
return
b
&
0xff;
}
return
-1;
}
public
void
Myclose()
throws
IOException{
in.
close();
//由于它是装饰类,那么我又自定义了一个关闭的方法
}
}
public
class
Test {
public
static
void
main(
String[]
args)
throws
IOException {
MyBufInputSteam
mi
=
new
MyBufInputSteam(
new
FileInputStream(
new
File(
"C:\\Users\\jython\\Desktop\\1.mp3")));
BufferedOutputStream
bof
=
new
BufferedOutputStream(
new
FileOutputStream(
new
File(
"C:\\Users\\jython\\Desktop\\2.mp3")));
int
i
=
0;
while((
i
=
mi.
MyRead())
!=
-1){
bof.
write(
i);
}
bof.
close();
mi.
Myclose();
}
}
运行效果
:
------------- android培训、java培训、java学习型技术博客、期待与您交流! ------------
详情请查看:http://edu.csdn.net/