Java 输入输出流03

8. 字符流 Writer/Reader

        Java 中字符是采用 Unicode 标准,一个字符是 16 位,即一个字符使用两个字节来表示。为此,JAVA 中引入了处理字符的流。

1)Reader抽象类

    用于读取字符流的抽象类。子类必须实现的方法只有 read (char [], int, int) 和 close ()。但是,多数子类将重写此处定义的一些方法,以提供更高的效率和 / 或其他功能。

 1:FileReader :

  与 FileInputStream 对应主要用来读取字符文件,使用缺省的字符编码,有三种构造函数: 
      (1)将文件名作为字符串 :FileReader f=new FileReader (“c:/temp.txt”); 
      (2)构造函数将 File 对象作为其参数。 
              File f=new file(“c:/temp.txt”); 
              FileReader f1=new FileReader(f); 
     (3)  构造函数将 FileDescriptor 对象作为参数 
            FileDescriptor() fd=new FileDescriptor() 
            FileReader f2=new FileReader(fd); 
               (1) 用指定字符数组作为参数:CharArrayReader (char []) 
               (2) 将字符数组作为输入流:CharArrayReader (char [], int, int) 
          读取字符串,构造函数如下: public StringReader (String s); 
    2:CharArrayReader:与 ByteArrayInputStream 对应  
 3: StringReader : 与 StringBufferInputStream 对应 
 4: InputStreamReader 
        从输入流读取字节,在将它们转换成字符:Public inputstreamReader (inputstream is); 
 5: FilterReader: 允许过滤字符流 
        protected filterReader(Reader r); 
 6: BufferReader : 接受 Reader 对象作为参数,并对其添加字符缓冲器,使用 readline () 方法可以读取一行。 
     Public BufferReader(Reader r); 

      主要方法:     

// 读取一个字符,返回值为读取的字符
public int read () throws IOException;  // 读取一系列字符到数组cbuf[]中,返回值为实际读取的字符的数量
public int read (char cbuf []) throws IOException;// 读取 len 个字符,从数组 cbuf [] 的下标 off 处开始存放,返回值为实际读取的字符数量,该方法必须由子类实现
public abstract int read(char cbuf[],int off,int len) throws IOException; 

2)Writer 抽象类

写入字符流的抽象类。子类必须实现的方法仅有 write (char [], int, int)、flush () 和 close ()。但是,多数子类将重写此处定义的一些方法,以提供更高的效率和 / 或其他功能。 其子类如下:

      1) FileWrite: 与 FileOutputStream 对应  
  将字符类型数据写入文件,使用缺省字符编码和缓冲器大小。 
  Public FileWrite(file f); 
  2)  chararrayWrite: 与 ByteArrayOutputStream 对应,将字符缓冲器用作输出。 
      Public CharArrayWrite(); 
  3) PrintWrite: 生成格式化输出 
      public PrintWriter(outputstream os); 
  4) filterWriter: 用于写入过滤字符流 
      protected FilterWriter(Writer w); 
  5) PipedWriter:与 PipedOutputStream 对应   

      6) StringWriter:无与之对应的以字节为导向的 stream  

      主要方法:

  (1)  public void write(int c) throws IOException; // 将整型值 c 的低 16 位写入输出流 
  (2)  public void write(char cbuf[]) throws IOException; // 将字符数组 cbuf [] 写入输出流 
  (3)  public abstract void write(char cbuf[],int off,int len) throws IOException; // 将字符数组 cbuf [] 中的从索引为 off 的位置处开始的 len 个字符写入输出流 
  (4)  public void write(String str) throws IOException; // 将字符串 str 中的字符写入输出流 
  (5)  public void write(String str,int off,int len) throws IOException; // 将字符串 str 中从索引 off 开始处的 len 个字符写入输出流 
  (6)  flush( ) // 刷空输出流,并输出所有被缓存的字节。 
  (7)close()    关闭流 public abstract void close() throws IOException

3)InputStream 与 Reader 差别 OutputStream 与 Writer 差别

 InputStream 和 OutputStream 类处理的是字节流,数据流中的最小单位是字节 (8 个 bit)
Reader 与 Writer 处理的是字符流,在处理字符流时涉及了字符编码的转换问题

import java.io.*;public class EncodeTest {  private static void readBuff(byte [] buff) throws IOException {  ByteArrayInputStream in =new ByteArrayInputStream(buff);  int data;  while((data=in.read())!=-1)   System.out.print(data+"  ");  System.out.println();     in.close();     }  public static void main(String args[]) throws IOException {  System.out.println("内存中采用unicode字符编码:" );  char   c='好';  int lowBit=c&0xFF;     int highBit=(c&0xFF00)>>8;  System.out.println(""+lowBit+"   "+highBit);  String s="好";  System.out.println("本地操作系统默认字符编码:");  readBuff(s.getBytes());  System.out.println("采用GBK字符编码:");  readBuff(s.getBytes("GBK"));  System.out.println("采用UTF-8字符编码:");        readBuff(s.getBytes("UTF-8"));      }  
}

 

Reader 类能够将输入流中采用其他编码类型的字符转换为 Unicode 字符,然后在内存中为其分配内存
Writer 类能够将内存中的 Unicode 字符转换为其他编码类型的字符,再写到输出流中。

9. IOException 异常类的子类

1.public class  EOFException :
   非正常到达文件尾或输入流尾时,抛出这种类型的异常。
2.public class FileNotFoundException:
   当文件找不到时,抛出的异常。
3.public class InterruptedIOException:
   当 I/O 操作被中断时,抛出这种类型的异常。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/202666.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

“数”说新语向未来 | GBASE南大通用2023媒体交流会成功举办

在当前国家信创战略加速实施,及国民经济数字化转型,叠加驱动信息化行业加速发展的大形势下,以“数说新语-GBASE南大通用开放创新再领航”为主题的2023 GBASE南大通用媒体交流日活动在GBASE天津总部举行。来自IT168、ITPUB、韩锋频道、自主可控…

Scala 从入门到精通

Scala 从入门到精通 数据类型 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http:…

Elasticsearch:向量搜索的优势 — 以及 IT 领导者需要它来改善搜索体验的 5 个原因

作者&#xff1a;Evan Castle 与谷歌和亚马逊等高质量搜索引擎的频繁互动提高了客户对快速且相关搜索的期望。 向量搜索&#xff08;也称为语义向量搜索&#xff09;利用深度学习和机器学习来捕获数据的含义和上下文。 向量搜索的好处 向量搜索可以增强公司的搜索体验并带来广…

一次重新加载所有 maven 项目产生的 OOM

1、解决什么问题&#xff1f; 忘了截图了&#xff0c;用文字描述就是由于Reload All Maven Projects导致的 OOM 异常。 2、尝试与解决 2.1、尝试 2.1.1、尝试清理idea缓存&#xff08;无效&#xff09; 2.1.2、重启idea&#xff08;无效&#xff09; 2.1.3、重启电脑&am…

nginx遇到的问题和jks密码问题

1&#xff1a;nginx的配置&#xff1a; https 一定得配置 8080 ssl (我没有配置这个) 2&#xff1a;查看jks的密码 keytool -list -keystore secms.jks 让输入密码

锂电分切机常见故障及预测性维护解决方案

锂电分切机是电池生产线上不可或缺的设备&#xff0c;通过切割锂电池以满足不同应用需求。但在实际生产的使用过程中&#xff0c;常常会遇到一些故障&#xff0c;影响设备的正常运行和生产效率。为了减少这些故障对设备的影响&#xff0c;预测性维护成为制造商需要重视的解决方…

Linux动态库常见问题

1.编译好库后&#xff0c;应用程序调用&#xff0c;路径明明写对了&#xff0c;但是编译的时候却显示xxx未定义 2.编译好了却说不能打开动态库&#xff0c;没有此文件 ./jrtplib_test: error while loading shared libraries: libjrtp.so.3.11.2: cannot open shared object f…

python初始化矩阵相关

做算法题经常需要初始化一个二维的dp数组 下面两种方法是最常用的 matrix [[0]*n]*n matrix [[0]*n for _ in range(n)]以前经常混用也没发现什么问题&#xff0c;直到昨天debug的时候发现第一种初始化之后对矩阵进行赋值时混乱的&#xff0c;比如matrix[0][1]2会导致所有行…

C语言面试之旅:掌握基础,探索深度(面试实战之单片机——IO)

梦想和自由一样&#xff0c;都有代价&#xff0c;但都值得。 ----小新 引言 单片机是一种微控制器&#xff0c;它包含一个处理器、存储器、定时器和I/O端口等。I/O端口是单片机与外部设备进行通信的接口。通过I/O端口&#xff0c;外部设备可以输入和输出数据到单片机中。 在单…

西工大计算机学院计算机系统基础实验一(函数编写1~10)

还是那句话&#xff0c;千万不要慌&#xff0c;千万不要着急&#xff0c;耐下性子慢慢来&#xff0c;一步一个脚印&#xff0c;把基础打的牢牢的&#xff0c;一样不比那些人差。回到实验本身&#xff0c;自从​​​​​​按照西工大计算机学院计算机系统基础实验一&#xff08;…

YOLOv8改进 | TripletAttention三重注意力机制(附代码+机制原理+添加教程)

一、本文介绍 本文给大家带来的改进是Triplet Attention三重注意力机制。这个机制&#xff0c;它通过三个不同的视角来分析输入的数据&#xff0c;就好比三个人从不同的角度来观察同一幅画&#xff0c;然后共同决定哪些部分最值得注意。三重注意力机制的主要思想是在网络中引入…

C陷阱与缺陷——第6章 预处理器

在严格意义上的编译过程开始之前&#xff0c;C语言预处理器首先对程序代码做了必要的转换处理。预处理器的主要作用是&#xff1a; 我们有时需要将某个特定数量在程序中出现的所有实例统统加以修改大多数C语言实现在函数调用时都会带来重大的系统开销 1. 不能忽视宏定义中的空…

Kontakt v7.7.2(音频采样器)

Native Instruments Kontakt 7是一款强大的软件采样器&#xff0c;它允许用户从各种来源采样音频并进行编辑和处理。它包含大量预设采样库&#xff0c;包括乐器、合成器、鼓组和声音效果等。此外&#xff0c;Kontakt 7还允许用户创建自己的采样库&#xff0c;以便根据自己的需要…

电脑版的便签软件使用哪一款?

您会选择使用电脑便签软件吗&#xff1f;很多人在日常工作及生活中会选择用电脑便签来督促自己按时完成工作任务&#xff0c;而且选择电脑便签是一个难题&#xff0c;毕竟当前电脑便签类工具非常多&#xff0c;如果想要找一款功能比较强大且又简单易用的便签工具&#xff0c;那…

HarmonyOS学习--创建和运行Hello World

创建和运行Hello World 打开DevEco Studio&#xff0c;在欢迎页单击Create Project&#xff0c;创建一个新工程。根据工程创建向导&#xff0c;选择创建Application应用或Atomic Service元服务。选择“Empty Ability”模板&#xff0c;然后单击Next。关于工程模板的介绍和支持…

A股股票交易费用

A股股票交易费用如下&#xff1a; 经手费&#xff1a;&#xff08;上证/深证&#xff09;按成交额双边收取0.0487‰&#xff0c;交给交易所。 监管费&#xff1a;&#xff08;深证&#xff09;按成交额双边收取0.02‰&#xff0c;交易所代收&#xff0c;交给证监会。 证管费&…

QGraphicsView实现简易地图7『异步加载-多瓦片-无底图』

前文链接&#xff1a;QGraphicsView实现简易地图6『异步加载-单瓦片-无底图』 前一篇文章提到的异步单瓦片加载&#xff0c;是指线程每准备好一个瓦片数据后&#xff0c;立刻抛出信号让主线程加载。而本篇异步多瓦片加载是指线程准备好所有瓦片数据后&#xff0c;一起抛出信号让…

将文件夹中所有文件名取出

dir C:\Users\是啊\Desktop\实验五/b>C:\Users\是啊\Desktop\1111.xls C:\Users\是啊\Desktop\实验五&#xff08;这个是文件夹路径&#xff09; /b &#xff08;参数&#xff09; C:\Users\是啊\Desktop\1111.xls&#xff08;文件名输出的文件路径&#xff09;

用VR+科普点亮科技之光VR航天科普体验巡展

11月22日至26日&#xff0c;第十一届中国(绵阳)科技城国际科技博览会圆满闭幕。本届科博会以“科技引领创新转化开放合作”为主题&#xff0c;创新办展办会模式&#xff0c;搭建高能级科技合作交流平台&#xff0c;展示了国内外科技创新发展成就和最新成果&#xff0c;举办了多…

内核无锁队列kfifo

文章目录 1、抛砖引玉2、内核无锁队列kfifo2.1 kfifo结构2.2 kfifo分配内存2.3 kfifo初始化2.4 kfifo释放2.5 kfifo入队列2.6 kfifo出队列2.7 kfifo的判空和判满2.8 关于内存屏障 1、抛砖引玉 昨天遇到这样一个问题&#xff0c;有多个生产者&#xff0c;多个消费者&#xff0c…