java BufferedReader 读取的视频文件总是不完整

jq1501557333 2011-08-05 05:29:17
初学java 实验的BufferedReader实验程序:
import java.io.*;

public class TestFilewriter {

public static void main(String[] args) {
BufferedReader reader;
BufferedWriter writer;
try{
reader=new BufferedReader(new FileReader("D:\\政和店开业\\M2U00207.MPG"));
writer=new BufferedWriter(new FileWriter("D:\\TestFile\\M2U00205.MPG"));
int s;
while((s=reader.read())!=-1){
writer.write(s);
writer.flush();
}
}catch(IOException e){
System.out.print("文件读写错误");
}
}

}

读出来的文件要比源文件少1M左右。,但是读取txt文件时完整的
但是我用FileInputStream写的程序,读写的文件时完成的,可以完全的读出来这个视频文件!
...全文
824 18 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2011-08-07
  • 打赏
  • 举报
回复
学习了
ctwoz 2011-08-07
  • 打赏
  • 举报
回复
学习…
半夜郎中 2011-08-07
  • 打赏
  • 举报
回复
楼主在输出完毕后有没有调用clear方法?然后在关闭IO,这样看看有没有输出完整
Hel1C 2011-08-07
  • 打赏
  • 举报
回复
读视频最好用字节流读。
因为是以-1为判断标志结束
而用字符流进行视频的解码可能会解出-1的2进制。 导致部分数据丢失。

判断是否读取完毕推荐使用while((s=reader.read())>0){}
还有个流的对拷的方法
Streams.copy(in, out, true); 第三个参数是是否关闭流的意思
Utopia 2011-08-06
  • 打赏
  • 举报
回复
视频,图像,.EXE等二进制的东西要用字节流读啊
字符读出来的大小会不一样,而且还乱码
qichao88888 2011-08-06
  • 打赏
  • 举报
回复
学习到了。
liu4626846 2011-08-06
  • 打赏
  • 举报
回复
恭喜lz!!
jq1501557333 2011-08-06
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 is_zhoufeng 的回复:]
还是建议用BufferedInputStream即提供了缓冲,提高效率。
而且视频文件是二进制流。应该用字节流来读取。
应该用更适合的 。
[/Quote]
呵呵,已经试验好了,确实不能BufferedReader得用BufferedInpuStream这个方法。
修改后如下(可以完整的读取视频文件了):
import java.io.*;

public class TestFilewriter {

public static void main(String[] args) {
BufferedInputStream reader;
BufferedOutputStream writer;
try{
reader=new BufferedInputStream(new FileInputStream("D:\\政和店开业\\M2U00207.MPG"));
writer=new BufferedOutputStream(new FileOutputStream("D:\\TestFile\\M2U00205.MPG"));
int s;
while((s=reader.read())!=-1){
writer.write(s);
writer.flush();
}
}catch(IOException e){
System.out.print("文件读写错误");
}
}

}
_jerrytiger 2011-08-05
  • 打赏
  • 举报
回复
还是建议用BufferedInputStream即提供了缓冲,提高效率。
而且视频文件是二进制流。应该用字节流来读取。
应该用更适合的 。
luohuijun619 2011-08-05
  • 打赏
  • 举报
回复
刷新下缓冲区试下
周靖峰 2011-08-05
  • 打赏
  • 举报
回复
用Reader不行的吧,那只能读取字符串,不能读二进制文件,应该用InputStream
若鱼1919 2011-08-05
  • 打赏
  • 举报
回复
BufferedReader是用来读字符的,视频是字符吗?
InputStream是用来读二进制流的,视频是二进制流,应该用InputStream
jq1501557333 2011-08-05
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 dr8737010 的回复:]
看了下api文档:
从字符输入流中读取文本,缓冲各个字符,从而提供字符、数组和行的高效读取。
看它的适用范围。
[/Quote]
我开始在api文档看到了FileReader是用来读取字符文件的便捷类,但是不确定,因为确实读取视频文件了,但是读取的不完整。所有我在网上问问。
BadPattern 2011-08-05
  • 打赏
  • 举报
回复
看了下api文档:
从字符输入流中读取文本,缓冲各个字符,从而提供字符、数组和行的高效读取。
看它的适用范围。
jq1501557333 2011-08-05
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 dr8737010 的回复:]
buffereReader读MPG行么?没试过,你改用其他基本的流试试
[/Quote]
用其他的流了,入FileinputStream就可以完整的读取,但是我现在是在实验BufferedReader,在晚上也没有找到是不是可以读取。
BadPattern 2011-08-05
  • 打赏
  • 举报
回复
buffereReader读MPG行么?没试过,你改用其他基本的流试试
jq1501557333 2011-08-05
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 softroad 的回复:]
输入输出流没关闭
[/Quote]
在线等答案,试了试,不行。读出来的文件还是错误,少了!
softroad 2011-08-05
  • 打赏
  • 举报
回复
输入输出流没关闭

62,635

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧