java基础学习心得——复制mp3
来源:互联网 发布:微信数据迁移到新手机 编辑:程序博客网 时间:2024/06/04 20:05
使用java代码复制mp3必须用到字节流的输入输出类,fileInputStream和fileOutputStream。不能用字符流的输入输出,是因为当字符流读入字符后,会按照取到的字符查表,若查不到,就会去位置编码区域查找类似编码进行修改,这样就会使原mp3的编码形式改变,所以一般读取非字符型文件使用字节流对象。
复制c盘下的“0.mp3”到c盘下"1.mp3",代码如下:
public static void copy()throws IOException{BufferedInputStream bis = new BufferedInputStream(new FileInputStream("c:\\0.mp3"));BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("c:\\1.mp3"));int ch = 0;while((ch=bis.read())!=-1)bos.write(ch);bis.close();bos.close();}BufferedInputStream、BufferedInputStream是带缓冲的输入、输出字节流。下面模仿BufferedInputStream的实现代码:
class myBufferedInputStream{private InputStream in;private byte[] buf = 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(buf);if(count < 0)return -1;pos = 0;byte b = buf[pos];pos++;count--;return b&255;}else if(count>0){byte b = buf[pos];pos++;count--;return b&0xff;}return -1;}public void myClose()throws IOException{in.close();}}在myRead()方法中,返回值b需要与255进行与运算,是因为b为1个字节,而返回值为int型,会将b的类型提升,若此时b为11111111(8个1)时,提升到int型刚好为11111111 11111111 11111111 11111111(32个1)为-1,与结束符返回值相同,为了避免这种现象,所以要对b进行与运算。
(个人观点:)也可以修改结束时的返回值,与b不冲突时也能正确执行。
0 0
- java基础学习心得——复制mp3
- 黑马程序员——复制mp3
- java io 缓冲区 MP3复制
- Java 字节流 复制MP3
- java基础学习心得——自定义函数实现LineNumberReader
- java基础学习心得——自定义类实现BufferedReader功能
- java基础学习心得
- Java基础学习心得1
- java基础学习心得
- Java基础---Java---IO流-----LineNumberReader方法及原理、自定义一个LineNumberReader、字节流、图片复制、mp3复制、
- java基础——复制文件
- Java学习心得——ShowMethodAddListeners
- 黑马程序员—2—Java基础:循环体的区别于联系和学习心得体会
- 黑马程序员—3—Java基础: 构造函数简介与用法和学习心得体会
- 黑马程序员—4—Java基础: 面向对象继承学习笔记和学习心得体会
- 黑马程序员—5—Java基础:多态学习笔记和学习心得体会
- 黑马程序员—7—Java基础:有关异常学习笔记和学习心得体会
- 黑马程序员—8—Java基础:有关包的学习笔记和学习心得和体会
- 查询速度优化用not EXISTS 代替 not in
- mysql MAKE_SET()用法
- 5.27 1h
- TreeView
- 【Android学习笔记】listview中去除分割线和每个item的间隔
- java基础学习心得——复制mp3
- JavaScript 如何快速得写出递归函数
- 数据库设计
- C#0010--窗体中的滚动字幕
- hdu1257(dp基础)
- Windows 2003下网络负载平衡(负载均衡)的配置
- encodeURI为什么要用两次
- ArcEngine10.1 代码连结选择不同事务版本进行数据库连接
- tapestry restful架构使用