首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >corejava辅导(13--2)

corejava辅导(13--2)

作者头像
紫风
发布2025-10-14 17:14:53
发布2025-10-14 17:14:53
790
举报

BufferInputStream和BufferOutputStream(带缓存的字节流)

以上两个是过滤流,可以提高I/O操作的效率 ,用于给节点流增加一个缓冲的功能。

在JVM的内部建立一个缓冲区,数据先写入缓冲区,等到缓冲区的数据满了之后再一次性写出,效率很高。使用带缓冲区的输入输出流的速度会大幅提高,缓冲区越大,效率越高。(这是典型的牺牲空间换时间)

切记:使用带缓冲区的流,如果数据数据输入完毕,使用flush()方法将缓冲区中的内容一次性写入到外部数据源。用close()也可以达到相同的效果,因为每次close()都会调用flush()。一定要注意关闭外部的过滤流。

管道流(和UnixC++中的FIFO相同)

PipedInputStream和PipedOutputStream (字节流)

这两个是节点流,注意,用来在线程间通信。

   PipedOutputStream pos=new PipedOutputStream();

         PipedInputStream pis=new PipedInputStream();

         try

         {

              pos.connect(pis);

              new Producer(pos).start();//线程类对象,在构造时,使用管道流通信

              new Consumer(pis).start();//线程类对象,在构造时,使用管道流通信

         }

         catch(Exception e)

         {

              e.printStackTrace();

         }

随机存取文件

RondomAccessFile类允许随机访问文件,这个类也是支持直接输出输入各种数据类型。

getFilepoint()可以知道文件中的指针位置,使用seek()定位。

Mode(“r”:随机读;”w”:随机写;”rw”:随机读写)

1) 实现了二个接口:DataInput和DataOutput;

2) 只要文件能打开就能读写;

3) 通过文件指针能读写文件指定位置;

4) 可以访问在DataInputStreamDataOutputStream中所有的read()write()操作;

5) 在文件中移动方法:

a. long getFilePointer(): 返回文件指针的当前位置。

b. void seek(long pos): 设置文件指针到给定的绝对位置。

c. long length(): 返回文件的长度。

字符流

字符流可以解决编程中字符的编码问题。从字符到整数,对字符集和整数集建立一一对应的关系,就算叫做编码,从整数映射到字符,就叫做解码。

编码问题

字节流的字符编码

字符编码把字符转换成数字存储到计算机中,按ASCii将字母映射为整数。

把数字从计算机转换成相应的字符的过程称为解码。

编码的方式

每个字符对应一个整数。不同的国家有不同的编码,当编码方式和解码方式不统一时,产生乱码。因为美国最早发展软件,所以每种的编码都向上兼容ASCII 所以英文没有乱码。

ASCII(数字、英文)1个字符占一个字节(所有的编码集都兼容ASCII)

ISO8859-1(欧洲)  1个字符占一个字节

GB-2312/GBK        1个字符占两个字节

Unicode            1个字符占两个字节(网络传输速度慢)

UTF-8              变长字节,对于英文一个字节,对于汉字两个或三个字节。

InputStreamReaderOutputStreamWriter(字节流转化成字符流的桥转换器)

这两个类不是用于直接输入输出的,他是将字节流转换成字符流的桥转换器,并可以指定编解码方式。

Reader和Writer (字符流类,所有字符流的父类型)

1) Java技术使用Unicode来表示字符串和字符,而且提供16位版本的流,以便用类似的方法处理字符。

2) InputStreamReaderOutputStreamWriter作为字节流与字符流中的接口。

3) 如果构造了一个连接到流的Reader和Writer,转换规则会在使用缺省平台所定义的字节编码和Unicode之间切换。

BufferedReader/(BufferedWriter,不常用)(这两个类需要桥转换)

PrintWriter(带缓存的字符输出流,不需要桥转换)

常用输入输出类型,不需要桥接,其中其它方法请参看API文档。

以上两个都是过滤流,需要用其他的节点流来作参数构造对象。

BufferedReader的方法:String  readLine(),当他的返回值是null时,就表示读取完毕了。要注意,再写入时要注意写换行符,否则会出现阻塞。

BufferedWriter的方法:newLine() ,这个方法会写出一个换行符。

PrintWriter的方法:println(….String,Object等等)write()println(...)这个方法就不必再写换行符了,在使用时会自动换行。

注意:在使用带有缓冲区的流时,在输入之后就要flush()方法,把缓冲区数据发出去。

原则:保证编解码方式的统一,才能不至于出现错误。

java.io包的InputStreamread输入流的从字节流到字符流的桥转换类。这个类可以设定字符转换方式。

OutputStreamred:输出流的字节流桥转换成字符流

Bufferreadreadline()使得字符输入更加方便。

在I/O流中,所有输入方法都是阻塞方法。

Bufferwrite给输出字符加缓冲,因为它的方法很少,所以使用父类PrintWrite,它可以使用字节流对象,而且方法很多。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-10-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档