• 带你一起玩转Java流


    🎨 个人介绍

    👉大家好,我是:知识的搬运工旺仔

    👉认真分享技术,记录学习过程的点滴,如果我的分享能为你带来帮助,请支持我奥🍻

    👉你的支持,是我每天更新的动力。

    👉赞点:👍 留言:✍ 收藏:⭐

    👉个人格言:想法一步一步的落实,才是你我前进最佳选择。

    1. 关于流、文件、IO简介

    1. Java.io 包几乎包含了所有操作输入输出需要的。所有这些流类代表了输入源输出目标
    2. Java.io 包中的支持很多种格式,比如:基本类型对象本地化字符集等等
    3. 一个可以理解为一个数据的序列输入流表示从一个源读取数据输出流表示向一个目标写数据
    4. JavaI/O 提供了强大的而灵活的支持,使其更广泛地应用到文件传输网络编程

    2. 读取控制台输入

    2.1 读取控制台输入简介

    1. Java 的控制台输入System.in 完成
    2. 为了获得一个绑定控制台的字符流,你可以把 System.in 包装在一个 BufferedReader 对象中来创建一个字符流
    3. BufferedReader 对象创建后,我们便可以使用 read() 方法从控制台读取一个字符,或者用 readLine() 方法读取一个字符串

    2.2 创建 BufferedReader基本语法

    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    
    • 1

    2.3 代码实例

    //使用 BufferedReader 在控制台读取字符
     
    import java.io.*;
     
    public class BRRead {
        public static void main(String[] args) throws IOException {
            char c;
            // 使用 System.in 创建 BufferedReader
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            System.out.println("输入字符, 按下 'q' 键退出。");
            // 读取字符
            do {
                c = (char) br.read();
                System.out.println(c);
            } while (c != 'q');
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    3. 控制台输出

    1. 在此前已经介绍过,控制台输出print( )println() 完成。这些方法都由类 PrintStream 定义System.out该类对象一个引用
    2. PrintStream 继承了 OutputStream类,并且实现了方法 write() 。这样,write() 也可以用来往控制台写操作

    4. I/O 流层次关系

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AeEYyMZC-1659963202295)(https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/b7de47ab58d44bee8a3317ee1cbb7f31~tplv-k3u1fbpfcp-watermark.image?)]

    5. FileInputStream流

    5.1 FileInputStream流简介

    1. 该流用于从文件读取数据,它的对象可以用关键字 new创建
    2. 多种构造方法可用来创建对象

    5.2 使用字符串创建一个输入流对象

    InputStream f = new FileInputStream("C:/java/hello");
    
    • 1

    5.3 使用文件对象创建一个输入流对象

    File f = new File("C:/java/hello");
    InputStream in = new FileInputStream(f);
    
    • 1
    • 2

    5.4 FileInputStream流的一些方法

    序号方法及描述
    1public void close() throws IOException{}
    1. 关闭此文件输入流
    释放此流有关所有系统资源
    2. 抛出IOException异常。
    2protected void finalize()throws IOException {}
    1. 这个方法清除
    该文件连接 。确保在不再引用文件输入流时调用其 close 方法。
    2. 抛出IOException异常。
    3public int read(int r)throws IOException{}
    1. 这个方法从 InputStream 对象
    读取指定字节的数据 。返回为整数值 。
    2. 返回下一
    字节数据 ,如果已经到结尾则返回-1。
    4public int read(byte[] r) throws IOException{}
    1. 这个方法从输入流读
    r.length长度字节
    2. 返回
    读取的
    字节数 。如果是文件结尾返回-1。
    5public int available() throws IOException{}
    1. 返回下一次
    对此输入流调用的方法可以不受阻塞地从此输入流读取的字节数
    2. 返回一个
    整数值

    6. ByteArrayInputStream流

    6.1 ByteArrayInputStream流简介

    1. 字节数组输入流内存创建一个字节数组缓冲区从输入流读取数据保存在该字节数组缓冲区中。创建字节数组输入流对象有以下几种方式
    2. 成功创建字节数组输入流对象后,可以参见以下列表中的方法,对流进行读操作其他操作

    6.2 字节参数作为参数创建

    ByteArrayInputStream bArray = new ByteArrayInputStream(byte [] a);
    
    • 1

    6.3 接收一个字节数组创建

    ByteArrayInputStream bArray = new ByteArrayInputStream(byte[] a, int off,int len)
    
    • 1

    参数说明:

    1. a:字节数组
    2. off表示第一个读取的字节
    3. len表示读取字节的长度

    6.4 ByteArrayInputStream流的一些方法

    序号方法描述
    1public int read()
    1. 从此输入流中读取下一个数据字节
    2public int read(byte[] r, int off, int len)
    1.将最多 len 个数据字节从此输入流读入字节数组
    3public int available()
    1. 返回可不发生阻塞地从此输入流读取的字节数。
    4public void mark(int read)
    1. 设置流中的当前标记位置
    5public long skip(long n)
    1. 从此输入流中跳过 n输入字节

    6.5 代码演示

    import java.io.*;
    ​
    public class ByteStreamTest {
    ​
       public static void main(String args[])throws IOException {
    ​
          ByteArrayOutputStream bOutput = new ByteArrayOutputStream(12);
    ​
          while( bOutput.size()!= 10 ) {
             // 获取用户输入值
             bOutput.write(System.in.read());
          }
    ​
          byte b [] = bOutput.toByteArray();
          System.out.println("Print the content");
          for(int x= 0 ; x < b.length; x++) {
             // 打印字符
             System.out.print((char)b[x]  + "   ");
          }
          System.out.println("   ");
    ​
          int c;
    ​
          ByteArrayInputStream bInput = new ByteArrayInputStream(b);
    ​
          System.out.println("Converting characters to Upper case " );
          for(int y = 0 ; y < 1; y++ ) {
             while(( c= bInput.read())!= -1) {
                System.out.println(Character.toUpperCase((char)c));
             }
             bInput.reset();
          }
       }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    7. DataOutputStream类

    7.1 DataOutputStream类简介

    1. 数据输出流允许应用程序以与机器无关方式Java基本数据类型写到底层输出流

    7.2 构成方法创建对象

    DataOutputStream out = new DataOutputStream(OutputStream  out);
    
    • 1

    7.3 方法介绍

    序号方法描述
    1public final void write(byte[] w, int off, int len)throws IOException
    1. 将指定字节数组中从偏移量 off,开始的 len个字节写入此字节数组输出流
    2Public final int write(byte [] b)throws IOException
    1. 将指定的字节写入此字节数组输出流
    3public final void writeBooolean() throws IOException
    public final void writeByte( ) throws IOException
    public final void writeShort() throws IOException
    public final void writeInt() throws IOException
    1. 这些方法指定基本数据类型字节的方式写入到输出流**。
    4Public void flush() throws IOException
    1. 刷新此输出流并强制写出所有缓冲输出字节
    5public final void writeBytes(String s) throws IOException
    1.将字符串以字节序列写入到底层的输出流 字符串每个字符都按顺序写入 ,并丢弃其高八位

    7.4 代码实例

    import java.io.*;
     
    public class Test{
       public static void main(String args[])throws IOException{
     
          DataInputStream in = new DataInputStream(new FileInputStream("test.txt"));
          DataOutputStream out = new DataOutputStream(new  FileOutputStream("test1.txt"));
          BufferedReader d  = new BufferedReader(new InputStreamReader(in));
         
          String count;
          while((count = d.readLine()) != null){
              String u = count.toUpperCase();
              System.out.println(u);
              out.writeBytes(u + "  ,");
          }
          d.close();
          out.close();
       }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    🎈看完了不妨给我点个赞吧,👉你的支持,是我每天更新的动力…

  • 相关阅读:
    工业设计公司的办公环境有哪些特点?
    微信小程序开发09 开放数据:微信生态帮助业务快速落地
    【学习笔记二十六】EWM 盘点后台配置和前台演示
    基金客户和销售机构
    mimkatz获取windows10明文密码
    爬虫实战——求是网周刊文章爬取
    C++ const修饰符
    计算机硬件和软件
    【C++】网络在线五子棋
    git 批量删除本地分支
  • 原文地址:https://blog.csdn.net/weixin_46213083/article/details/126235933