发布于2021-05-29 21:27 阅读(1221) 评论(0) 点赞(29) 收藏(5)
字符流=字节流+编码表
字符其实只是一种特殊的二进制字节,是按照一定的编码方式处理之后,按照一定规则来存储信息的数据,字符在计算机中也是由二进制组成的,只不过这种二进制可以按照一种规则解码后,成为人类可以直接阅读的自然语言,而普通的二进制文件只有计算机能直接“阅读”。字节操作和字符操作的区别就在于数据的格式。在使用场景上,字符流无法直接获取文本信息的二进制文件,比如图片,mp3,视频文件等,只能使用字节流。而对于文本信息,则更适合使用字符流。
Java Reader是用于读取字符流的抽象类。子类必须实现的唯一方法是read(char [],int,int)和close()。但是,大多数子类将覆盖某些方法以提供更高的效率和、附加功能。
字段类型 | 字段 | 说明 |
---|---|---|
protected Object | lock | 对象用于读取流时候进行加锁操作 |
构造方法
方法
方法 | 说明 |
---|---|
abstract void close() | 它关闭流并释放与之相关的任何系统资源。 |
void mark(int readAheadLimit) | 它标记流中的当前位置。 |
boolean markSupported() | 它告诉此流是否支持mark()操作。 |
int read() | 读取单个字符。 |
int read(char[] cbuf) | 读入数组。 |
int read(CharBuffer target) | 它尝试将字符读入指定的字符缓冲区。 |
boolean ready() | 它告诉这个流是否准备好被读取。 |
void reset() | 重置流。 |
long skip(long n) | 它跳过字符。 |
它是用于写入字符流的抽象类。子类必须实现的方法有write(char[]、int、int)、flush()和close()。大多数子类将重写这里定义的一些方法以提供更高的效率和、附加功能。
方法 | 说明 |
---|---|
abstract void close() | 它关闭流并释放与之相关的任何系统资源。 |
void mark(int readAheadLimit) | 它标记流中的当前位置。 |
boolean markSupported() | 它告诉此流是否支持mark()操作。 |
int read() | 读取单个字符。 |
int read(char[] cbuf) | 读入数组。 |
int read(CharBuffer target) | 它尝试将字符读入指定的字符缓冲区。 |
boolean ready() | 它告诉这个流是否准备好被读取。 |
void reset() | 重置流。 |
long skip(long n) | 它跳过字符。 |
字符流处理的单元为2个字节的Unicode字符,分别操作字符、字符数组或字符串,而字节流处理单元为1个字节,操作字节和字节数组。所以字符流是由Java虚拟机将字节转化为2个字节的Unicode字符为单位的字符而成的,所以它对多国语言支持性比较好!如果是音频文件、图片、歌曲,就用字节流好点,如果是关系到中文(文本)的,用字符流好点.所有文件的储存是都是字节(byte)的储存,在磁盘上保留的并不是文件的字符而是先把字符编码成字节,再储存这些字节到磁盘。在读取文件(特别是文本文件)时,也是一个字节一个字节地读取以形成字节序列.
java的类设计采用了大量的设计模式,流Api也不例外,对于字符流采用适配器类InputStreamReader去操作底层字节流,在InputStreamReader类中构建StreamDecoder去操作字节流。而对于缓冲区流(后面文章会讲)则采用装饰者模式去增强类的行为,感兴趣的同学去阅读下源码!
import java.io.FileWriter;
public class FileWriterExample {
public static void main(String args[]){
try{
FileWriter fw=new FileWriter("D:\\testout.txt");
fw.write("Welcome to javaTpoint.");
fw.close();
}catch(Exception e){System.out.println(e);}
System.out.println("Success...");
}
}
import java.io.*;
public class ReaderExample {
public static void main(String[] args) {
try {
Reader reader = new FileReader("D:\\testout.txt");
int data = reader.read();
while (data != -1) {
System.out.print((char) data);
data = reader.read();
}
reader.close();
} catch (Exception ex) {
System.out.println(ex.getMessage());
}
}
}
识别下方二维码!回复:
入群
,扫码加入我们交流群!
原文链接:https://blog.csdn.net/weixin_36133625/article/details/117265652
作者:coding
链接:http://www.javaheidong.com/blog/article/207511/2d2edc6d04d89336029f/
来源:java黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 java黑洞网 All Rights Reserved 版权所有,并保留所有权利。京ICP备18063182号-2
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!