黑马程序员技术交流社区
标题:
InputStreamReader的问题
[打印本页]
作者:
谭荣强
时间:
2014-4-25 17:00
标题:
InputStreamReader的问题
InputStreamReader可以和BufferedReader的组合,使用readLine()方法,读取字节流。能操作媒体文件吗(如图片等,我试了下,好像乱码),纯文本也用到它,难道它只能用在键盘录入上?
作者:
电饭煲
时间:
2014-4-25 17:16
求详细代码
作者:
谭荣强
时间:
2014-4-25 17:39
电饭煲 发表于 2014-4-25 17:16
求详细代码
显示文件损坏
public static void main(String[] args) {
// TODO Auto-generated method stub
copyPic("d:\\00\\1.png");
}
public static void copyPic(String pathName){
BufferedReader bi=null;
BufferedOutputStream bo=null;
try {
//转换流 使用readLine方法。
InputStreamReader ins = new InputStreamReader(new FileInputStream(pathName));
bo= new BufferedOutputStream(new FileOutputStream("d:\\1.png"));
bi= new BufferedReader(ins);
// byte[] buf = new byte[1024*1024];
String line=null;
while((line=bi.readLine())!=null){
bo.write(line.getBytes());
bo.flush();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally{
//关闭资源
if(bi!=null){
try {
bi.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(bo!=null){
try {
bo.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
作者:
王春蕾
时间:
2014-4-25 17:45
BufferedReader不是读取字符流的吗??对图片操作应该使用字节流
作者:
世界公民
时间:
2014-4-25 17:52
本帖最后由 世界公民 于 2014-4-25 17:54 编辑
哥们,你用字符流读图片数据而且还是一行一行的读,你想一想,不出问题才怪呢,你调用读取一行的方法,他会把图片的数据按照查表发查到所对应的字符,直到查到换行符\r\n时才会把数据返回给你,但是因为你读的数据是图片所以是不大可能存在\r\n的字符的,也就是说不会返回数据的,然后就会出现各种莫名的异常。。。。要读写非文本数据,一定要使用字节输出输入流,而不要使用字符流。
作者:
eternallove
时间:
2014-4-25 18:05
图片和多媒体文件都是二进制数据,应该用字节流进行读取,字符流本来就是专门设计的操作文本文件的流,如果用字符流操作图片和多媒体文件,它在解码的时候就会直接转为文本,当然会是乱码。
字符流是字节流的一种封装形式,只是对操作文本文件的简化提高效率,你这就相当于给自己挖个坑跳进去然后再想办法跳出来,自找麻烦。所以非常不建议这样玩。
作者:
你为谁归来
时间:
2014-4-25 18:19
字节流是通用的,字符流应用于文本文件的!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2