黑马程序员----IO流

ST7789驱动实战:从SPI时序到RGB565显示的完整配置解析 本文详细解析了ST7789液晶驱动芯片的SPI时序配置与RGB565显示实现,从数据手册解读到代码实战,涵盖SPI接口配置、关键寄存器设置及完整初始化流程。通过优化DMA传输和常见问题排查,帮助开发者高效驱动ST7789显示屏,适用于嵌入式显示项目开发。 阅读详情

------- android培训、java培训、期待与您交流! ----------
java中的流可以按不同角度进行分类:

1、从操作数据的流不同分为:字节流和字符流

2、从流向不同分为:输入流,输出流

IO流常用基类:
     (1)字节流
          输出字节流:OutputStream:字节写入流抽象类
                   |--->FileOutputStream字节写入流
                   |--->BufferedOutputStream: 字节写入流缓冲区
                   |--->PrintStream:  打印流
          输入字节流:InputStream:字节读取流抽象类
                   |--->FileInputStream:  字节读取流
                   |--->BufferedInputStream: 字节读取流缓冲区
     (2)字符流    
          输出字符流:Writer:字符写入流的抽象
                   |--->FileWriter:  字符写入流
                   |--->BufferedWriter:  字符写入流缓冲区
                   |--->OutputStreamWriter:字符通向字节的转换流(涉及键盘录入时用)
                   |--->OutputStreamWriter:      打印流,可处理各种类型的数据
          输入字符流:Reader: 字符读取流的抽象类
                   |--->FileReader:  字符读取流
                        |--->LineNumberReader:跟踪行号的缓冲字符读取流
                   |--->BufferedReader:   字符读取流缓冲区
                   |--->InputStreamReader:
                                  字节通向字符的转换流(涉及键盘录入时用)

 

字符流总结:

文件读取和写入:FileReader, fileWriter,

分别提供常用的两种读写方式:

第一种:FileReader提供 fr.read();一个字符一个字符的读取,返回读取的个数(int c),当返回-1时表示文件已读取结束。理所当然fileWriter也提供了每次写入一个字符的方法,fw.write(int c);

其中参数表示  :c - 指定要写入字符的 int。

第二种:FileReader提供读取字符数组方法,fr.read(char [] buf) 返回读取的字符数,如果已到达流的末尾,则返回 -1。fileWriter也提供了写入数组的方法 fw.write(char[] buf,int off,int len);

buf - 字符缓冲区

off - 开始写入字符处的偏移量

len - 要写入的字符数

 

字符流的缓冲区: 

缓冲区的出现了读取数据的效率。

对应的类:BufferedReader  BufferedWriter

缓冲区要结合流才能使用。是在流的基础上进行加强。

 

Buffered缓冲流::BufferedInputStream,BufferedOutputStream,BufferedReader,BufferedWriter,是带缓冲区的处理流。

缓冲流的作用:避免每次跟磁盘打交道,提高数据的访问效率。(提高流的操作效率),所以在缓冲区之前必须要有流对象。

缓冲区中有个跨平台换行符方法newLine();

利用缓冲区技术字符流读取操作。(BufferedReader)

        步骤:定义流对象与被读取文件相关联FileReader fr=new FileReader("f:\\1.txt");

                 定义缓冲区,把流对象作为参数放进缓冲区:

                BufferedReader br=new BufferedReader(fr);

                利用while循环,一行一行的读取(br.readLine();此处返回类型是一个String,如果返回为null说明已读取到末尾处)

            String  len=null;

            while((len=br.readLine())!=null){

                  System.out.println("读出了:"+len);

}

               最后关闭资源。

 

  readLine原理:无论是读一行,获取多个字符,最终都是从硬盘上一个一个的读取,都是使用read方法中一次读取一个字符的方法。readLine中封装了数组,每读一个就放在缓冲区中(不立即返回),当读到\r\n时,表示读取一行结束,因此此时就返回一行数据。

            

        自定义缓冲区解析readLine();

import java.io.FileReader;
import java.io.IOException;
public class MyBufferedReaderDemo {

     public static void main(String[] args) throwsIOException{
         
          FileReader fr1=newFileReader("f:\\1.txt");
          MyBufferedReader myBufferedReader=new MyBufferedReader(fr1);
          String line=null;
          while((line=myBufferedReader.myReadLine())!=null) {
              System.out.println("读取:"+line);
              
          }
          myBufferedReader.myClose();
         
     }

}
//自定义缓冲区,实现自定义readLine()方法
class   MyBufferedReader {
    
     private  FileReader fr;
    
     public  MyBufferedReader(FileReader fr){
          this.fr=fr;
     }
    
         //自定义myreadLine方法每次读取一行数据
     public  String myReadLine() throws IOException{
          int ch=0;
          //定义stringBuffer临时容器,因为最终还是要将数据变为字符窜返回。
          //原bufferedReader中封装的是数组
          StringBuffer sb=newStringBuffer();
          while((ch=fr.read())!=-1) {
         
              if(ch=='\r')
                   continue;
              if (ch=='\n')
                   return  sb.toString();
              else
              sb.append((char)ch);
                             
          }
          if(sb.length()!=0){
              return  sb.toString();
          }
          return  null;
     }
     public void myClose() throws IOException{
          fr.close();
     }
    
}


流的操作规律:

往往流对象很多,在开发时不知道该用哪一个流对象。

下面我们通过三个明确来判断该选用那个刘对象。

1、明确源和目的。

      源:输入流 inputStream  reader

      目的:输出流 OutputStreamwriter

2、操作的数据是不是纯文本?

    是!字符流  不是!字节流

3、当体系明确后,在明确使用那个流对象。(通过设备来区分。)

    源设备:内存、硬盘、键盘

    目的设备:内存、硬盘、控制台

例:将一个文本文件存储到另一个文件中。(复制文件)

     源:因为是源,所以使用读取流。InputStream reader

          是不是操作文本文件:是!这时就可以选择reader(字符流读取)  

          接下来明确改使用那个流对象。 

             明确设备:硬盘。一个文件。所以reader体系中可以操作文件读取数据的流对象是:FileReade    

             明确是否需要提高效率 

             FileReader fr=new FileReader("f:\\1.txt"); //创建流对象与文件相关联

             BUfferedReader buff=new  bufferedReader(fr);

     目的:  OutputStream writer

     明确是不是纯文本文件:是!利用reader体系中FileWriter对象

     接下来明确改使用那个流对象。    

             明确设备:硬盘。一个文件。所以reader体系中可以操作文件读取数据的流对象是:FileWriter 

               FileWriter fw=newFileWriter("f:\\2.txt"); //创建流对象与文件相关联

             BUfferedWriter buff=new BUfferedWriter (fr);

转换流:InputStreamReader  OutputStreamWirter 

什么时候使用:字节转换为字符时使用   编码转换

字节转字符:

package IO;
 
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
 
public class InputStreamReaderDemo {
        /**
         * @param 字节流转成字符流 InputStreamReader(用于字节转为字符流的桥梁)
         * 在利用字符流的缓冲技术readLine方法 更高效的读取操作。
         * 需求:从键盘录入数据,写入文本文件中(从键盘录入属于字节流操作,所以为了提供效率,要进行字节流转成字符流)
         * 源:键盘录入
         * 目的:文本文件
         */
        publicstatic void main(String[] args) throws IOException {
         
        /*      //获取键盘输入流对象
               InputStream   in=System.in;
               //将字节流转为字符流
               InputStreamReader  isr=new InputStreamReader(in);
               //将字符流对象放进缓冲区中,提供更高的效率操作数据
               BufferedReader  buff=new BufferedReader(isr);*/
              
               //BufferedReader buff=new BufferedReader(new InputStreamReader(System.in));
                BufferedReader buff=new BufferedReader(newInputStreamReader(new FileInputStream("F:\\1.txt")));
              
               //--------->>outPutStreamReader字符流转为字节流的桥梁
               /*OutputStream out=System.out;
                OutputStreamWriter osw=newOutputStreamWriter(out);
                BufferedWriter bw=new BufferedWriter(osw);*/
                 BufferedWriter   bw=new BufferedWriter(new OutputStreamWriter(System.out));
               //  BufferedWriter   bw=new BufferedWriter(new OutputStreamWriter(newFileOutputStream("f:\\1.txt")));
              
                String line=null;
                while((line=buff.readLine())!=null){
                        //自定义键盘输入结束标记
                        if("over".equals(line))
                                break;
                       //System.out.println(line.toUpperCase());
                        bw.write(line.toUpperCase());
                        bw.flush();
                }
 
        }
 
}


编码转换:

 

package IO;
 
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
 
public class EncodeStream {
 
        /**
         * @param 转换流:InputStreamReader  OutputStreamWirter
         * 什么时候使用转换流???    1、字节转换成字符   2、编码转换。
         */
        publicstatic void main(String[] args) throws IOException{
              
  //  wirterText();
    readText();
        }
       
        public   static void  wirterText() throwsIOException{
               //GBk编码中,一个字符占两个字节。
               //UTF-8编码中,一个字符占3个字节。
               OutputStreamWriter  osWriter=new OutputStreamWriter(newFileOutputStream("f:\\utf.txt"),"UTF-8");
               osWriter.write("你好");
               osWriter.close();
        }
 
        public  static void  readText() throwsIOException{
              
               InputStreamReader  isr=new InputStreamReader(newFileInputStream("f:\\utf.txt"),"GBK");
               char[]ch=new  char[1024];
               intlen=0;
               len=isr.read(ch);
               String  str=new String(ch, 0, len);
               System.out.println(str);
        }
}

File类解析说明:

    file类的常见方法:

    1、创建。

        boolean createNewFile();在指定位置创建文件,如果文件已经存在则不创建,返回false。和输出流不一样,输出流对象一建立就创建文件,如果存在就会覆盖  File f=new File("f:\\filedemo.txt");   f.createNewFile();

       booleanmkdir();创建文件夹,只能一级一级的创建 eg: File  dir=new File("f:\\abc");

       boolean mkdirs();创建文件夹,多级同时创建 eg: File  dir=newFile("f:\\abc\\kk\\yy\\a");

 

    2、删除。boolean delete();删除失败返回false   void deleteOnExit();在虚拟机退出时,删除指定位置文件。

    3、判断。boolean exists();文件是否存在。

                   boolean  isDirectory();判断目录是否存在  

                   boolean  isFile();判断文件是否存在。  

                   boolean isHidden();是否隐藏文件。

  4、获取信息:getName();  getParent();获取父目录,length();.........

------- android培训、java培训、期待与您交流! ----------

 

 


Python实战:用Py2neo轻松玩转Neo4j图数据库(附完整CRUD示例) 本文通过构建武侠知识图谱的实战案例,详细介绍了如何使用Python的Py2neo库对Neo4j图数据库进行CRUD操作。内容涵盖环境搭建、节点与关系创建、Cypher查询、数据更新删除及事务管理,帮助开发者直观高效地处理复杂关联数据,实现从入门到进阶的完整交互流程。 阅读详情

相关推荐

从逻辑门到存储阵列:NAND与NOR闪存命名与结构原理详解

在数字电路与半导体存储器领域,逻辑门是构建一切复杂功能的基础单元,其输入输出关系定义了计算与存储的基本原理。与非门(NAND)和或非门(NOR)作为通用逻辑门,其真值表和行为模式深刻影响了芯片设计。基于这些原理,现代闪存技术发展出了两种核心架构:NAND Flash和NOR Flash。这两种闪存的命名直接源于其内部存储单元阵列的连接方式,分别模拟了与非门和或非门的逻辑关系。这种结构差异决定了它们根本的技术价值:NOR Flash采用并联结构,支持快速随机读取,适用于代码存储与原地执行(XiP);而NAND

weixin_33377602的博客 337

Java 转换流 InputStreamReader&OutputStreamWirter

(一)InputStreamReader常用构造方法 1)InputStreamReader(InputStream in, String charsetName) 创建使用指定字符集的 InputStreamReader。 in - InputStream charsetName - 受支持的 charset 的名称 2)InputStreamReader(InputStream in) 创建一...

shaxu123的博客 452

SAP PCC成本收集器实战:从配置到结算的完整流程解析

本文详细解析了SAP PCC成本收集器从配置到结算的完整流程,特别适用于重复制造行业。通过实战案例和配置要点,帮助用户掌握物料分类账管理、成本中心费用归集及差异分析等核心功能,提升企业生产成本控制效率。

weixin_29251567的博客 893

OutputStreamWriter

|--字符流( 字符流 = 字节流 +编码表。) |--字符输入流 Reader ------抽象类 int read():一次读取一个字符 int read(...

weixin_34376562的博客 507

CarMaker快速入门

本合集是小明师兄推出的CarMaker汽车仿真,CarMaker无论是传统动力学、动力系统开发、底盘系统开发还是目前智能驾驶辅助系统及智能驾驶系统开发有着非常重要的作用,可以有效节省开发周期和开发成本,基于仿真快速实现算法开发和系统验证。...

小明师兄的博客 1万+

RK3566/RK3588 NPU性能实测:用mobilenet模型快速验证你的开发板NPU是否正常工作

本文提供了RK3566/RK3588开发板NPU性能实测指南,通过MobileNet模型快速验证NPU是否正常工作。详细介绍了环境搭建、测试资源获取、编译运行及结果分析的全流程,帮助开发者高效验证神经网络加速器功能,为后续AI应用部署奠定基础。

weixin_28826521的博客 447

java wirter_java之转换流,OutputStreamWriter的简单介绍

各位小伙伴们大家好,在之前的文章中,小编介绍了java之转换流的原理。这次,小编要介绍的是转换流中的OutputStreamWriter,与及它的使用,具体如下:java.io.OutputStreamWriter extends WriterOutputStreamWriter:是字符通向字节流的桥梁:可以指定的charset将要写入流中的字符编码成字节。(编码:能看懂的字符变为看不懂的字节)继...

weixin_35275189的博客 331

第11.4节 混合储能系统能量管理

混合储能系统(HESS)的能量管理策略采用分层架构实现多时间尺度优化:调度层(小时级)进行经济优化,协调层(秒级)基于频率分解分配功率,执行层(毫秒级)实现快速跟踪。深度强化学习(DRL)方法通过定义状态空间、动作空间和多目标奖励函数,能有效处理系统不确定性和多目标优化问题。HESS性能评估需综合技术指标(如调节性能Kp值、设备寿命指标)和经济指标(净现值NPV、平准化储能成本LCOS),并遵循"建模-仿真-实验"的闭环流程。

技术工作者 244

JAVA基础知识之OutputStreamWriter流

一、OutputStreamWriter流     API说明:OutputStreamWriter是从字符流到字节流的桥接:使用指定的字符集将写入其中的字符编码为字节。它使用的字符集可以通过名称指定,也可以明确指定,或者可以接受平台的默认字符集。 每次调用write()方法都会导致在给定字符上调用编码转换器。生成的字节在写入底层输出流之前在缓冲区中累积。可以指定此缓冲区的大小,但默认情况下,它...

咕噜是个胖子 5万+

Apifox接口测试+自动化测试

Apifox 接口测试+自动化测试快速入门!

程序员小杨哥的博客 1万+

【UNet 改进 | 注意机制篇】UNet引入CA注意力机制(2021 CVPR),二次创新

在医学图像分割任务中,病灶区域往往形态各异、边界模糊,且经常与周围组织的对比度较低,这要求模型具备极强的特征提取和细节辨别能力。传统的U-Net网络虽然通过跳跃连接融合了多尺度特征,但在处理复杂语义和精细边缘时仍有不足,尤其是在捕获特征时常常忽略位置信息。为了解决这些痛点,本文引入了在计算机视觉领域表现出色的 CA(Coordinate Attention,协调注意力)机制。CA 巧妙地将位置信息嵌入到了通道注意力中,通过水平和垂直两个方向的一维池化,同时捕获长距离依赖和精确的位置坐标。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 183

OutputStreamWriter类详解

|--字符流( 字符流 = 字节流 +编码表。) |--字符输入流 Reader ------抽象类 int read():一次读取一个字符 int read(char[] chs):一次读取一...

weixin_42473653的博客 3220

Cesium 实战 04 - 标绘功能系列之画点(draw point)

Cesium 实战 - 标绘功能之画点(draw point)。

非科班Java出身GISer的博客 1083

IO流(黑马程序员学习笔记)

字节缓冲流在源代码中内置了字节数组,可以提高读写效率。效率高(推荐,代码简单),流每次拿指定数组大小的字节,再写入目的源。效率高,每次从数据源拿8192个字节,再放到内存中,每次从内置数组(调用出来的数组)中拿每次拿指定数组大小的字节,写到输出数组中,写满8192个字节后,输出。/*D:\00-课程介绍.mp4 146MB拷贝的效率测试:1. 普通流单个字节拷贝 361719毫秒2. 普通流 + 自定义数组拷贝 146毫秒3. 缓冲流单个字节拷贝 2055毫秒。

A2294249395的博客 890

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

黑马程序员——IO流

黑马程序员——IO流 -----------android培训、java培训、java学习型技术博客、期待与您交流!------------ 一、概述 IO流用来处理设备之间的数据传输。 Java对数据的操作时通过流的方式。 Java用于操作流的对象都在IO包中。 流按操作数据分为两种:字节流与字符流 流按流向分为:输入流、输出流。 流操作规律: 明确源和目的。(源:输入流。目的

ji1ang6的博客 442

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

黑马程序员_IO流

1.IO流的三种分类方式:  (1).按流的方向分为:输入流和输出流 (2).按流的数据单位不同分为:字节流和字符流 (3).按流的功能不同分为:节点流和处理流 2.IO流的四大抽象类:     字符流:Reader(读取流)   Writer(写入流)     字节流:InputStream(读取流)   OutputStream(写入流)

求知者 467

黑马程序员——Java基础之IO流

IO流   一、概述: IO流用来处理设备之间的数据传输 Java对数据的操作是通过流的方式 Java用于操作流的对象都在IO包里 流按操作数据分为两种:字节流和字符流;[编码表的存在][汉字与1010之间的对应的表GBK] 流按流向分为:输入流,输出流。 Unicode码表,都是两个字节。优化——>Unicode-8,需要几个字节就给几个字节。 问题:如你好在不同的编码

zdh_61的专栏 953

黑马程序员————Java的IO流的详解

JavaIO流的实现方式和用途,性能的讲解

瑞雪的博客 866

黑马程序员 — IO流

什么是流: 流就是程序和设备之间嫁接起来的一根用于数据传输的管道,这个管道上有很多按钮,不同的按钮可以实现不同的功能 节点流与处理流: 节点流:(也叫原始流) 节点流为可以从一个特定的数据源(节点)读写数据(如:文件,内存) 处理流:(也叫包裹流) 处理流是“连接”在已存在的流(节点流或处理流)之上

INT_INIT的专栏 714

黑马程序员--IO流

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——- 注:视频来源,毕向东老师的 JAVA 基础视频。第一部分 IO概述 1、IO 流用来处理设备之间的数据传输。2、Java 对数据的操作是通过流的方式。3、Java 用于操作流的对象都在 IO 包中。4、流按操作数据分为两种:字节流和字符流。5、流按流向分为:输入流和输出流。注意:流只能操作数据,而不能操作文件

sinat_29779023的博客 544
上一篇: 黑马程序员------面向对象
下一篇: 黑马程序员------递归解析
start_zhang
博客等级 码龄14年 1粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值