使用字符流、客户端读取文本文件发送至服务端

本文通过客户端和服务端的示例代码展示了在网络通信中如何避免出现乱码现象,介绍了字符流的概念及其在读取和发送字符串过程中的应用。

前面我们socket客户端发送你好a我是客户端这样的字符串给服务端,服务端接受的数据有了乱码。

你好a�����������

这是因为每次读取的字节限制。数据乱码不代表数据丢失了。

字符流

在字节流的概念里,OutputStream是输出,InputStream是输入。

字符流中,有2个抽象类分别是ReaderWriter
抽象类派生的子类,是我们编码中需要使用的。
这里写图片描述
1、客户端

            // 创建客户端
            Socket client = new Socket("127.0.0.1",9000);

            // 客户端准备向服务端发送数据
            OutputStream outputStream = client.getOutputStream(); //获取 输出流
            String msg = "我是客户端";

            OutputStreamWriter outputStreamWriter = new OutputStreamWriter(outputStream);
            BufferedWriter bufferedWriter = new BufferedWriter(outputStreamWriter);
            bufferedWriter.write(msg);

            bufferedWriter.close();
            outputStream.close(); //关闭输出流
            client.close(); //关闭客户端

2、服务端

            // 服务端创建一个监听
            ServerSocket serverSocket = new ServerSocket(9000);
            Socket socket = serverSocket.accept(); //等待客户端接入

            // 准备接受客户端发送过来的数据
            InputStream inputStream = socket.getInputStream(); //获取 输入流
            InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);

            String getLineStr = "";
            while ((getLineStr = bufferedReader.readLine()) != null){
                System.out.println(new String(getLineStr));
            }


            // 关闭
            inputStream.close();
            socket.close();
            serverSocket.close();

读取本地资源文件

比如本地resources资源目录中,有一个1.txt文件,内容是n多行字符串。

改造客户端代码:

            // 创建客户端
            Socket client = new Socket("127.0.0.1",9000);

            // 客户端准备向服务端发送数据
            OutputStream outputStream = client.getOutputStream(); //获取 输出流
            BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream));

            // 读取项目本地资源文件
            String filePath = MyClient.class.getResource("/1.txt").getPath();
            FileReader fileReader = new FileReader(filePath);

            BufferedReader bufferedReader = new BufferedReader(fileReader);
            while (true){
                String tmp = bufferedReader.readLine();
                if (tmp == null) break;

                bufferedWriter.write(tmp);
                bufferedWriter.newLine();
            }

            bufferedWriter.close(); // 关闭就会刷新缓存区
            fileReader.close();
            outputStream.close(); //关闭输出流
            client.close(); //关闭客户端
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值