ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
server ```  System.out.println("服务器 启动.....  ");          // 1. 创建服务端ServerSocket        ServerSocket serverSocket = new ServerSocket(6666);       // 2. 建立连接                  Socket accept = serverSocket.accept();        // 3. 创建流对象           // 3.1 获取输入流,读取文件数据             BufferedInputStream bis = new BufferedInputStream(accept.getInputStream());         // 3.2 创建输出流,保存到本地 .  BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("copy.jpg")); // 4. 读写数据                   byte[] b = new byte[1024 * 8];         int len;          while ((len = bis.read(b)) != ‐1) {              bos.write(b, 0, len);          }         //5. 关闭 资源          bos.close();         bis.close();          accept.close();          System.out.println("文件上传已保存"); ``` ``` // 1.创建流对象          // 1.1 创建输入流,读取本地文件     BufferedInputStream bis  = new BufferedInputStream(new FileInputStream("test.jpg"));          // 1.2 创建输出流,写到服务端           Socket socket = new Socket("localhost", 6666); BufferedOutputStream   bos   = new BufferedOutputStream(socket.getOutputStream());            //2.写出数据.   byte[] b  = new byte[1024 * 8 ];          int len ;           while (( len  = bis.read(b))!=‐1) {              bos.write(b, 0, len);              bos.flush();         }          System.out.println("文件发送完毕");          // 3.释放资源            bos.close();           socket.close(); bis.close();  ``` 文件上传优化 ``` 1. 文件名称写死的问题 服务端,保存文件的名称如果写死,那么最终导致服务器硬盘,只会保留一个文件,建议使用系统时间优 化,保证文件名称唯一 FileOutputStream fis = new FileOutputStream(System.currentTimeMillis()+".jpg") // 文件名称 BufferedOutputStream bos = new BufferedOutputStream(fis); ``` ``` 2. 循环接收的问题 服务端,指保存一个文件就关闭了,之后的用户无法再上传,这是不符合实际的,使用循环改进,可以不断 的接收不同用户的文件,代码如下: // 每次接收新的连接,创建一个Socket while(true){     Socket accept = serverSocket.accept();     ...... } ``` ``` 3. 效率问题 服务端,在接收大文件时,可能耗费几秒钟的时间,此时不能接收其他用户上传,所以,使用多线程技术优 化,代码如下: while(true){      Socket accept = serverSocket.accept();      // accept 交给子线程处理.      new Thread(() ‐> {        ......            InputStream bis = accept.getInputStream();        ......        }).start(); } ```