黑马程序员技术交流社区

标题: IO缓存方面的问题 [打印本页]

作者: 王飞    时间: 2012-12-25 18:50
标题: IO缓存方面的问题
本帖最后由 王飞 于 2012-12-26 18:44 编辑



/*我是这样想的:既然存在转换流,那么将读取到的字节数据转换成字符串,然后在将读取到的字符串转换成字节数据写出去。这样就可以使用缓存技术提高效率了
*
* 1,大哥们能否实现啊?如果可以的话我哪地方有问题呀?
*
*  
* 2,我用下面的方式拷贝了图片,但是拷贝后的图片比原来的字节少,丢失了数据。损坏了---------这么解决这个问题呀?
*
*/


public class aaa {

        public static void main(String[] args) throws Exception{
                //将图片以字符的形式读取
                BufferedReader buff = new BufferedReader(new InputStreamReader(new FileInputStream("ss.jpg")));//读取图片
                BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("ss_copy.jpg")));//写入图片数据
                 
                String line=null;
                while((line=buff.readLine())!=null){
                        bufw.write(line);        //读取一行数据就将其写出去
                }
               
                buff.close();
                bufw.close();
        }

}

作者: yuchen208    时间: 2012-12-25 20:12
http://blog.csdn.net/melearner/article/details/7036609
  1. @Test
  2.         public void test4() {
  3.                 /**
  4.                  * inputstream和outputstream复制一个照片
  5.                  */
  6.                 InputStream fis = null;
  7.                 OutputStream fos = null;
  8.                 try {
  9.                         /**
  10.                          * InputStream输入流 OutputStream输出流
  11.                          */
  12.                         fis = new FileInputStream("d:/0.jpg");
  13.                         fos = new FileOutputStream("d:/1.jpg");
  14.                         byte[] image = new byte[1024];
  15.                         int headread = 0;
  16.                         while ((headread = fis.read(image)) != -1) {
  17.                                 /**
  18.                                  * 写入文件
  19.                                  */
  20.                                 fos.write(image, 0, headread);
  21.                         }
  22.                 } catch (FileNotFoundException e) {
  23.                         e.printStackTrace();
  24.                 } catch (IOException e) {
  25.                         e.printStackTrace();
  26.                 } finally {
  27.                         /**
  28.                          * 关闭输入输出流
  29.                          */

  30.                         if (fis != null) {
  31.                                 try {
  32.                                         fis.close();
  33.                                 } catch (IOException e) {
  34.                                         e.printStackTrace();
  35.                                 }
  36.                         }
  37.                         if (fos != null) {
  38.                                 try {
  39.                                         fos.close();
  40.                                 } catch (IOException e) {
  41.                                         e.printStackTrace();
  42.                                 }
  43.                         }
  44.                 }
  45.         }
复制代码
图片是字节流读取的
作者: 郭俊    时间: 2012-12-25 21:50
本帖最后由 L_trail 于 2012-12-25 21:54 编辑

1,同学不能的,你想啊,图片里面是字节流,你确用了一个字符流是接收,即使接收,有些能转换成功,但是还是会出现有转不了的,你运行过后对比两个文件大小,应该知道Copy后的图片会小好多。
2,但是你可以用字节流去copy文本文件
3,代码
       BufferedInputStream bis = new BufferedInputStream(new FileInputStream("ss.jpg"));
       BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("ss_copy.jpg"));
       byte[] by = new byte[1024];
       int len = 0;
       while ((len = bis.read(by)) !=-1) {
           bos.write(by,0,len);
           bos.flush();
       }  
       bis.close();
       bos.close();
作者: 王飞    时间: 2012-12-26 11:12
郭俊 发表于 2012-12-25 21:50
1,同学不能的,你想啊,图片里面是字节流,你确用了一个字符流是接收,即使接收,有些能转换成功,但是还 ...

帅哥,我知道字节流可以读取:P。
但是不是有转换流吗,我想用转换流然后一次读取一行数据,而字节流每次读取一个装到by中,我想直接读取一行数据然后在将这一行写入。现在看来行不通了。copy的数据确实比之前的少了些
还是谢谢你的回答:handshake
作者: 王飞    时间: 2012-12-26 11:14
yuchen208 发表于 2012-12-25 20:12
图片是字节流读取的

我明白,只是想试一下用转换流能否成功。看来行不通了
谢谢回答:handshake
作者: yuchen208    时间: 2012-12-26 19:00
只能字节流转字符流:InputStreamReader  OutputStreamWriter
作者: yuchen208    时间: 2012-12-26 19:01
字节流:处理二进制文件,或文本文档
字符流:只能处理文本文件




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2