3.30学习内容

字符流

总结1:如何创建流

Reader fr = new FileReader(new File("d:/a.txt"));

Writer fw = new FileWriter("d:/b.txt");

如何读字符

ch = fr.read();

char[] cbuf = new char[1024];

如何写字符

fw.write(ch);

fw.write(cbuf, 0, len);

总结2:字符流和字节流的联系和区别

联系:都是流,都可以读写文件

   字符流的底层使用的是字节流(从该意义上只有字节流,没有字符流)

   FileReader----------InputStreamReader(适配器模式)-----------InputStream

区别:字节流读取的基本单位是一个字节,字符流读取的基本单位是一个字符

   字节流可以读写任意类型的文件(图片,视频,CHM),字符流只能读取    文本文件(txt   java   html)   doc xls不是文本文件

总结3:一个字符占几个字节

2个字节   不正确

内存中 Unicode   char   肯定是2个,可以显示主流的各种语言

硬盘中

GBK   简体汉字   1个汉字2个字节   只能显示汉字,不能显示韩语、日语、越 南语

BIG5   繁体汉字   1个汉字2个字节

UTF-8      一个汉字3个字节   可以显示主流的各种语言

读一个字符,可能是英文字符,也可能是中文字符

如何区别英文和汉字

首字母

英文 0110  1101

汉字 11110110  11001101

缓冲流:

总结1

FineInputStream   FileOutputStream  节点流,直接和文件相连

BufferedInputStream   BufferedOutputStream   包装流、过滤流,提高性能

总结2:

只要关闭高层流(过滤流)即可,会关闭底层流

总结3:flush

bos.close(); //先flush刷新缓冲,再关闭流

bos.flush();

总结4::

只有文本文件才有按行读取的功能,所以BufferedReader提供了readLine功能,

BufferedInputStream没有提供

不同的操作系统的换行符不同,BufferedWriter提供了newLine,会根据不同的操 作系统获取换行符并使用。

总结5:使用包装流的好处

1.提高性能

2.简化操作

总结3:readLine的原理

readLine本质上还是通过read方法来实现的。

借助read()和循环来实现,结束条件是遇到换行符

转换流:

总结1:标准输入输出设备

System.in   输入设备 键盘

System.out   输出设备 显示器

System.ree   错误信息输出设备 显示器

总结2:System.in是字节流,readLine只有字符流提供,怎么办?

三相的插头------(三相插座)转换头(两相插头)------二相的插座

字节流InputStream------转换流InputStreamReader------字符流Reader

进去的是字节流,范返回是字符流

总结3:转换流

InputStream is = System.in;

Reader reader = new InputStreamReader(is);

BufferedReader br = new BufferedReader(reader);

总结4:转换流有几个

InputStreamReader   InputStream------>Reader

OutputStreamWriter   OutputStream------>Writer

ReaderInputStream   没有

WriterOutputStream   没有

字节流可以转换字符流,字符流没有必要转换成字节流

总结5:FileReader------InputStreamReader(将字节流转成字符流)

字符流的底层还是字节流

总结6:

缺点:使用流接受键盘的输入太复杂了,高版本中提供了Scanner

使用流输出内容到显示器太复杂了,还是使用System.out.println(str); 好

System.out------PrintStream


打印流

总结1:只有输出流,没有输入流

     可以分为字节流PrintStream和字符流PrintWriter

总结2:

println() 可以重载  可以将各种基本类型和引用类型的数据直接写入文件

     不需要住那换成字节或者字节数组,方便

System.out  是PrintStream类的一个对象

总结3:

PrintWriter 提供了更多的更方便的构造方法

  传递字节流、File、String,底层不仅进行了字节流转换成字符流的操   作,还添加了Buffer,可以提高速度

总结4:自动刷新的功能

PrintWriter pw= new PrintWriter(new FileWriter("d:/a.txt"), true);

遇到换行符自动刷新

PrintWriter PrintStream 包装流

数据流

PrintWriter和PrintStream

1.优点

一个println()可以直接将各种类型的数据直接写入文件

并且是文本文件,可读可查看

2.缺点

1.只管写,不管读

2.不管何种类型,写进去全部变成字符串

解决方案

DataInputStream和DataOutputStream 可以读写各种基本数据类型和String

ObjectInputStream和ObjectOutputStream  可以读写各种基本数据类型、String、 各种引用类型

注意:

只有字节流,没有字符流

以非字符方式写入文件,不可以直接查看

可以使用对应的输入流来读取

字节数组流

总结1:Java流中节点流有哪些

文件流FileReader   FileWriter   FileInputStream   FileOutputStream

另外还有数组流

ByteArrayInputStream和ByteArrayOutputStream  字节流 数据源是内存中的 字节数组

CharArrayReader和CharArrayWriter   字符流

  StringReader和StringWriter   字符串流

总结2:如何实现字符串和字节数组之间的转换

字节数组--->String

new String(buf, 0, len);

String--->字节数组

byte[] buf2 = str.getBytes();

byte[] buf2 = str.getBytes("utf-8");

总结3:如何实现所有数据类型(基本数据类型、引用数据类型)和字节数组之间的转换

ByteArrayInputStream和ByteArrayOutputStream   字节流

字节数组在Java开发中,比如网络通信中会使用

注意:

1.ByteArrayOutputStream的数据源是一个长度可以动态增长的字节数组

2.作用:转换成字节数组后,可以保存到硬盘或者通过网络传输

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值