上一节我们学习了最简单的字节流 其中图片还有一些媒体文件存储方式都为字节的形式

image.png
上一节我们看到了(客户端正常的发送了字符串)字符流输出客户端内容会有占用字节的情况 那么如何处理这个问题呢?

image.png
其实老外已经在流输入输出的write方法里对字符流做了封装(通过字符编码表把字节转换成字符)
接下来看下字符流和字节流如何转化

image.png

image.png
上面这张图说明了字符流和字节流存在java.io这个包下面
下面代码演示下字符流
MyClient中代码修改如下

image.png
MyServer中代码修改如下

image.png
运行结果
先运行MyServer 在运行MyClient

image.png

image.png
可以看见MyClient很快的运行完了 而MyServer还没运行完
运行完MyClient再次看MyServer
结果如下

image.png
可以看见MyClient运行完毕了 但是结果却什么都没有
这是由于上面提到的缓冲区的问题

image.png
由于write方法里面的值没有达到缓冲区的值 没有进行发送 所以运行结果看不到内容
这时需要用到下面代码

image.png
MyServer修改总代码如下

image.png
运行结果

image.png
可以看见结果跟我们发送的内容不太一样,多了一个客字 这是因为我们是每3个字符一发送的
我们可以把发送字符数改大一些
如下

image.png
运行结果

image.png
接下来我们学习一个新类
来到OutputStreamWriter这个类的源码

image.png
通过注释可以看出每次执行write方法的时候都会对字码表进行转换 所以老外又做了个封装类BufferedWriter
接下来演示一下BufferedWritter的用法
MyServer里面

image.png
MyClient里面

image.png
同时将MyClient发送内容改为多行

image.png
运行结果

image.png
由于我们在开发时候不会再发送内容处写入多个\n来换行
这时我们可以用下面的方法

image.png
运行结果

image.png

image.png
为了演示 我们在资源文件夹下创建一个client.txt文件

image.png
1.首先先把文件读取出来
获取资源文件夹下面的文件方法

image.png
当前文件的class.getResouce(文件名) //从资源文件夹下读取文件

image.png

image.png
运行结果

image.png
思路为先得到字节流 转换成字符流