IO(Input Output)流__字节流详解编程语言

续:

 ——->>>>字节流

   IntputStream   OutputStream

  需求:想要操作图片数据,就需要用到字节流。

  读写操作:

    FileOutputStream  FileInputStream

    <—写—>

    FileOutputStream fos = new FileOutputStream(“fos.txt”);

    fos.write(“abcde”.getBytes());

    fos.close();

  <—读—>

    FileInputStream fis = new FileInputStream(“fos.txt”);

    byte[] buf = new byte[fis.availabe()];  //定义一个刚刚好的缓冲区,不用再循环了。

    fis.read(buf);

    System.out.println(new String(buf));

    fis.colse();

 

  拷贝图片:

    思路:1、用字节读取流对象和图片关联;

       2、用字节写入流对象创建一个图片文件,用于存储获取到的图片数据;

         3、通过循环读写,完成数据的存储

       4、关闭资源

   部分代码如下:

 1     FileOutputStream fos = null; 
 2  
 3     FileInputStream fis = null; 
 4  
 5     try { 
 6  
 7       fos = new FileOutputStream("Demo.bmp"); 
 8  
 9       fis = new FileInputStream("DemoCopy.bmp"); 
10  
11       byte[] buf = new byte[1024]; 
12  
13       int len = 0; 
14  
15       while((len = fis.read(buf)) != -1) { 
16  
17         fos.write(buf, 0, len); 
18  
19       } 
20  
21     }catch() { 
22  
23       throw new RuntimeException("复制文件失败"); 
24  
25     } 
26  
27     finally { 
28  
29       try{ 
30  
31         if(fis != null) 
32  
33           fis.close(); 
34  
35       }catch(IOException e) { 
36  
37         throw new RuntimeException("读取关闭失败"); 
38  
39       } 
40  
41       try{ 
42  
43         if(fos != null) 
44  
45           fos.close(); 
46  
47       }catch(IOException e) { 
48  
49         throw new RuntimeException("写入关闭失败"); 
50  
51       } 
52  
53     }

   字节流的缓存区:

      演示mp3的复制,通过缓冲区。

      BufferedOutputStream

      BufferedInputStream

    public static void copy() throws IOException {

      BUfferedInputStream bufis = new BufferedInputStream(new FileInputStream(“Demo.mp3”));

      BufferedOutputStream bufos = new BufferedOutputStream(new FileOutputStream(DemoCopy.mp3));

      int by = 0;

      while((by = bufis.read()) != -1) {

        bufos.write(by);

      }

      bufos.close();  bufis.close();

    }

  附加小练习:自定义一个缓冲区;

    

 读取键盘录入:

    System.out :  对应的标准输出设备, 控制台

    System.in :  对于的标准输入设备: 键盘

   需求:通过键盘录入数据,当录入一行数据后,就将该行数据进行打印; 如果录入的数据是over,那么停止录入。

 1     InputStream in = Sytem.in; 
 2     StringBuilder sb = new StringBuilder(); 
 3     int ch = 0; 
 4  
 5     while(true) { 
 6  
 7       int ch = in.read(); 
 8       if(ch == '/r')  
 9  
10         cntinue; 
11       if(ch == '/n') { 
12  
13         String s = sb.toString(); 
14         if("over".equals(s))  
15           break; 
16         System.out.println(s.toUpperCase()); 
17         sb.delete(0, sb.length()); 
18       } 
19       else 
20         sb.append((char) ch); 
21       sb.append((char) ch) ; 
22     }

  读取转换流:

    //获取键盘录入对象。

      InputStream in = System.in;

    //将字节流对象转成字符流对象,使用转换流。 InputStreamReader

      InputStreamReader isr = new InputStreamReader(in);

    //为了提高效率,将字符串进行缓冲区技术高效操作,使用BufferedReader

      BufferedReader bufr = new BufferedReader(isr);

 

    加强:BufferReader bufr = 

          new BufferReader(new InputStreamReader(System.in));

      String line = null;

      while((line = bufr.readLine()) != null) {

        System.out.println(line.toUpperCase());

      }

      bufr.close();

  写入转换流:

     BufferedWriter bufw =

         new BufferedWriter(new OutputStreamWriter(System.out));

     

     String line = null;

     While((line = bufr.readLine()) != null) {

      if(“over”.equals(line)) {

       break;

      bufw.writer(line.toUpperCase());       

      bufw.newLine();

      bufw.flush();

     }

     bufr.close();

 

 

 

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/13457.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论