java 中TCP通信 关于文件写入数据不对的问题?注释里面有解决方法,我却不清楚为什么会这样

package com.cinsos.RunableTCP;

import java.io.*;
import java.net.InetAddress;
import java.net.Socket;
import java.util.Arrays;
//这是一个客户端类
public class ClientDemo {
    public static void main(String[] args) throws IOException {
        Socket s=new Socket(InetAddress.getByName("fan").getHostAddress(),7777);
        File f=new File("C:\\Users\\34399\\Desktop\\员工.xlsx");
        BufferedInputStream fi=new BufferedInputStream(new FileInputStream(f));
        BufferedOutputStream bo=new BufferedOutputStream(s.getOutputStream());
        BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
        bw.write(f.getName());
        bw.newLine();
        bw.flush();

        byte[] b=new byte[1024];
        int lie;
        while ((lie=fi.read(b))!=-1){
            System.out.println(Arrays.toString(b));
            bo.write(b,0,lie);
        }
        bo.flush();
        s.shutdownOutput();
        BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream()));
        System.out.println(br.readLine());
    }
}
package com.cinsos.RunableTCP;

import com.cinsos.TCP2.Util;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Arrays;
//这是服务器类
public class ServerDemo {
    public static void main(String[] args) throws IOException {
        ServerSocket ss=new ServerSocket(7777);
        Socket s = ss.accept();
        BufferedInputStream fi=new BufferedInputStream(s.getInputStream());
        BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream())); 
//问题代码出现在这一行,解决方法我注释了,但是为什么会这样,一直没有想明白,为什么会出现这样的问题呀,
        FileOutputStream fo=new FileOutputStream(new File((Util.getYearMothDay()+br.readLine())));
//        String s1 = br.readLine();
//        FileOutputStream bo=new FileOutputStream(new File(Util.getYearMothDay()+s1));
//System.out.println(s1);
        int len;
        byte[] b=new byte[1024];
        while ((len=fi.read(b))!=-1){
            System.out.println(Arrays.toString(b));
            fo.write(b,0,len);
        }
        BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
        bw.write("文件上传成功");
        bw.newLine();
        bw.flush();
    }
}

没有任何的报错信息,就是后面读文件的时候,二进制码不一样了,所以很奇怪。按道理来说,声明一个变量拼接跟直接用返回值拼接都是一样的呀


参考一下