zoukankan      html  css  js  c++  java
  • 常见IO流简介

    常见IO流简介

    一:IO流结构图

    在这里插入图片描述

    二.IO流类

    流(对象)是在内存与存储设备之间传输数据的通道

    1.方向: a. 输出流:用以将<内存>中的内容写入到<存储设备>当中。 b. 输入流:用以将<存储设备>中的内容读入到<内存>当中。 2. 单位: a. 字节流:以字节为单位,可以读写所有数据。 b. 字符流:以字符为单位,可以读写文本数据。 3. 功能: a. 节点流:实际传输数据。 b. 过滤流:强加节点流功能。

    常见的字节流:
    • 文件流:FileOutputStream 和 FileInputStream
    • 缓冲流:BufferedOutputStream 和 BufferedInputStream
    • 对象流:ObjectOutputStream 和 ObjectInputStream
    常见的字符流:
    • 字节转字符流:InputStreamReader 和 OutputStreamWriter

    • 缓冲字符流:PrintWriter 和 BufferedReader

    三.八个IO流类

    1.FileInputStream和FileOutputStream (文件字节输入流和文件字节输出流)
    • 属性:字节流

    • 主要方法:分别为read() 读一个字节 和 read(byte[]) 读一个字节数组

      ​ writer() 写一个字节 和 writer(byte[]) 写一个字节数组

    • 用途:用于字节文件(图像,影音等)的文件传输

    • 代码提示:

      //图像复制:
      String path="D:"+File.separator +"test.png";
      String resultPath="D:"+File.separator +"test1.png";
      File file=new File(path);
      //File resultfile=new File(path);
      FileInputStream fin = null;
      FileOutputStream fout = null;
      try{
         fin =new FileInputStream(file);
         fout = new FileOutputStream(resultpath,true);
         int result=0;
         while((result=fin.read()!=-1){
         fout.write(result);
         }
      }catch (IOException e) {
      	e.printStackTrace();
      } finally {
         if (in != null) {
      	try {
      		in.close();
      	} catch (IOException e) {
      		e.printStackTrace();
      	}
         }
         if (out != null) {
      	 try {
      		out.close();
      	} catch (IOException e) {
      	e.printStackTrace();
      	}
          }
      }         
      

      tip:

      • 一个文件只能打开一个方向的流通道
      • 输出流会自己新建文件,但不会新建目录
    2.FileReader和FileWriter(文件字符输入流和文件字符输出流)
    • 属性:字符流

    • 主要方法: read() 读一个字符 和read(char[])

      ​ writer() 写一个字符 和writer(char[])

    • 用途:文本文件的传输

    • 代码提示: 如上图

    3.BufferedInputStream和BufferedOutputStream(缓冲字节输入流和缓冲字节输出流)
    • 属性:缓冲流 字节流

    • 用途:字节流的用法,但速度更快

    • 代码提示:

    4.BufferedReader和BufferedWriter(缓冲字符输入流和缓冲字符输出流)
    • 属性: 缓冲流 字符流

    • 主要方法:多了一个readLine()和newLine()等

    • 用途:字符流的用途,速度更快

    • 代码提示:

      String path = "D:" + File.separator + "test.txt";
      String resultpath = "D:" + File.separator + "test1.txt";
      BufferedReader br = null;
      BufferedWriter bw = null;
      char[] a = new char[100];
      try {
      	br = new BufferedReader(new FileReader(path));
      	bw = new BufferedWriter(new FileWriter(resultPath, true));
      	// --------------------------第一种
      	/*br.read(a);
      	String st = new String(a);
      	System.out.println(st);
      	bw.write(st);*/
      	// -------------更简洁的另一种,但没有中间变量st
      	int temp = 0;
      	while ((temp = br.read()) != -1) {
      		bw.write(temp);
      	}
      	// -----------------------
      
      } catch (IOException e) {
      	e.printStackTrace();
      } finally {
      	CloseIO.charClose(br, bw);//自己写的封装的流的关闭
      }
      

    四.详解

    1. 字符流本质是字节流的拓展封装
    2. 缓冲流是字节流和字符流的包装,使用缓冲流效率更好
    3. InputStreamReader是从字节流到字符流的桥接器
    InputStreamReader rd = new InputStreamReader(System.in);	
    BufferedReader br = new BufferedReader(rd);
    String readLine = br.readLine();
    //-----------------------------第二种
    InputStream is = client.getInputStream();
    BufferedReader br = new BufferedReader(new InputStreamReader(is));
    String rl = br.readLine();
    

    4.网络编程中,Java用的是对象流Socket

    Don't just say it. Show me your code.
  • 相关阅读:
    位军营 20190919-4 测试,结对要求
    位军营 20190919-5 代码规范,结对要求
    国内源
    hexo安装-nodejs
    python调用chrome打开指定网址
    生成证书,用于签名Android应用
    cygwin64-安装包管理工具
    Android-删除指定包名的App
    pyqt5加载网页的简单使用
    打包python到exe
  • 原文地址:https://www.cnblogs.com/bigbeardhk/p/12752597.html
Copyright © 2011-2022 走看看