JAVA中的字节流和字符流

IO: Input Output
构造器:
File(String path)
File(String parent, String child)
File(File parent, String path)
API:
boolean exists();
boolean isFile();
boolean isDirectory();
void createNewFile();
void mkdir();
void mkdirs();
void delete();
File[] listFiles();
File[] listFiles(FileFilter);

字节流: InputStream/OutputStream
用来做文件复制
包装 -> 高级流: BufferedInputStream/BufferedOutputStream
Buffered: 缓冲/缓存
FileInputStream
int read(): 读单字节, 并且存入int值中返回, 读到文件末尾, 返回-1
int read(byte[] bs): 读文件, 并且将读出来的字节存入到指定的数组中,
最多一次读出来bs.length个字节
返回读出来的字节个数, 读到文件末尾, 返回-1
int read(byte[] bs, int offset, int length);

FileOutputStream
void write(int): 写单字节, 指定int值得低八位
void write(byte[]): 将这个字节数组中所有的字节一起写入
void write(byte[], int offset, int length)

扩展: 文件加密 -> 原理, 将读出来的字节做了运算后写入到新文件中
解密 -> 将加密过的文件, 再读出, 做一个还原运算, 重新写入
运算 -> 为了避免byte取值范围溢出, 同时为了避免加密解密两套代码
一般使用 ^ 运算,两次异或运算后,返回原值
1 2 4 8 16 32 64
63 = 32 + 16 + 8 + 4 + 2 + 1
00111111
^ 13 = 00001101
= 00110010
^ 13 = 00001101
= 00111111

字符流: Reader/Writer
InputStreamReader(InputStream in, String charsetName) - 指定字符集
InputStreamReader(InputStream in) - 默认字符集
int read() 读一个字符
int read(char[] cbuf) 将字符读入数组。
int read(char[] cbuf, int off, int len) 将字符读入数组的一部分。
注: 以上三个方法, 返回 -1 都标记着读到文件末尾

OutputStreamWriter(OutputStream out, String charsetName)
OutputStreamWriter(OutputStream out)
    void write(char[] cbuf) 写入一个字符数组。
    void write(char[] cbuf, int off, int len) 写入字符数组的一部分。
    void write(int c) 写入单个字符

包装字符流 -> 缓冲字符流
通常用来读写文件内容
BufferedReader(Reader)
String readLine(): 读取一整行, 返回null 标记读到文件末尾
PrintWriter
1.只能清空原文件内容, 但是可以指定字符集
PrintWriter(String fileName, String csn)
2.可以在原文件上追加内容, 但是不可以指定字符集, 可以自动刷新缓冲区
PrintWriter(OutputStream out, boolean autoFlush)
3.可以在原文件上追加内容, 可以指定字符集, 可以自动刷新缓冲区
PrintWriter(Writer out, boolean autoFlush)

    void print(Object): 写出内容, 不加换行
    void println(): 写出内容, 并且换行
    注意: 自动刷新的功能, 只有println方法具有
          print方法 必须手动刷新

对象输入输出流:
对象 -> 文件[字节] : 序列化
文件[字节] -> 对象 : 反序列化
ObjectInputStream(InputStream)
Object readObject()
ObjectOutputStream(OutputStream)
void writeObject(Object)

Serializable: 可序列化的
    接口中没有常量, 也没有抽象方法, 空接口
    序列化接口没有方法或字段,仅用于标识可串行化的语义。
    
serialVersionUID: 给类添加固定的序列版本号
transient: 修饰的变量, 在序列化的时候, 会被忽略掉

小结:
字节流(缓冲)
字符流(缓冲) --> 内容肯定能读懂, 对字符操作
对象流 --> 对象变成字节(看不懂)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值