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、韩锋频道、自主可控…

海思SD3403/SS928V100开发(11)双网卡同网段外部回环搭建测试

1. 前言 网卡eth0: 内部自带网卡 网卡eth1: USB扩展网卡 需要通过将eth0和eth1设置成相同网段IP, 通过外部网络互联进行老化测试 问题: Linux的内核对从一个网络地址发往另一个网络地址的数据包,如 果这两个网络地址同属一个host,则这个数据包会直接在内部转发,根本…

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:…

Linux取消挂载相关

取消挂载&#xff08;target is busy&#xff09;问题原因 [rooticoolkj ~]# umount /data umount: /data: target is busy.(In some cases useful info about processes that usethe device is found by lsof(8) or fuser(1))报错的原因通常是由于待卸载磁盘正在使用&#xf…

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

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

旅游规划——最短路

有了一张自驾旅游路线图&#xff0c;你会知道城市间的高速公路长度、以及该公路要收取的过路费。现在需要你写一个程序&#xff0c;帮助前来咨询的游客找一条出发地和目的地之间的最短路径。如果有若干条路径都是最短的&#xff0c;那么需要输出最便宜的一条路径。 输入格式: …

day7 哈希表(二)

Day7 哈希表&#xff08;二&#xff09; 2023.12.6 深感抱歉&#xff0c;这几天事情太多了&#xff0c;昨天跟导师出差&#xff0c;整理资料到半夜&#xff0c;一直没空打卡学习&#xff0c;今晚难得有空&#xff0c;先将昨天12.5日的任务补上。 1. 454四数相加Ⅱ 这道题其实还…

一次重新加载所有 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…

【LeetCode】258. 各位相加

258. 各位相加 难度&#xff1a;简单 题目 给定一个非负整数 num&#xff0c;反复将各个位上的数字相加&#xff0c;直到结果为一位数。返回这个结果。 示例 1: 输入: num 38 输出: 2 解释: 各位相加的过程为&#xff1a; 38 --> 3 8 --> 11 11 --> 1 1 --&g…

数树问题(桶排序)

某校大门外长度为L的马路上有一排树&#xff0c;每两棵相邻的树之间的间隔都是1米。我们可以把马路看成一个数轴&#xff0c;马路的一端在数轴0的位置&#xff0c;另一端在L的位置&#xff1b;数轴上的每个整数点&#xff0c;即0&#xff0c;1&#xff0c;2&#xff0c;……&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…

java面试题,上楼梯有多少种方式

java面试题&#xff0c;上楼梯有多少种方式 题目&#xff1a;一个小孩上一个N级台阶的楼梯&#xff0c;他可以一次走1阶、2阶或3阶&#xff0c;那么走完N阶有多少种方式。 很自然的想法是使用递归&#xff1a; public class Test04 { public static int countWays(int n) {…

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. 不能忽视宏定义中的空…

基于Java停车场管理系统

功能需求 1、用户注册和登录&#xff1a;系统需要提供用户注册和登录的功能&#xff0c;使得用户可以创建账户并保护他们的个人信息。 2、车辆管理&#xff1a;能够记录并跟踪进出停车场的车辆信息&#xff0c;包括车牌号、车型、颜色等。 3、停车位管理&#xff1a;显示停车…