java - 我如何编辑此代码,以便服务器在发送到客户端之前压缩文件,客户端在接收后解压缩该文件

标签 java compression zip unzip

我希望服务器在发送到客户端之前应压缩文件,并且客户端在从服务器获取文件后解压缩文件。我不知道如何才能实现这一目标。有人可以帮我吗?

服务器端代码

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class SimpleFileServer {

  public final static int SOCKET_PORT = 13267; 
  public final static String FILE_TO_SEND = "c:/temp/xyz.txt";  

  public static void main (String [] args ) throws IOException {
    FileInputStream fis = null;
    BufferedInputStream bis = null;
    OutputStream os = null;
    ServerSocket servsock = null;
    Socket sock = null;
    try {
      servsock = new ServerSocket(SOCKET_PORT);
      while (true) {
        System.out.println("Waiting...");
        try {
          sock = servsock.accept();
          System.out.println("Accepted connection : " + sock);
          // send file
          File myFile = new File (FILE_TO_SEND);
          byte [] mybytearray  = new byte [(int)myFile.length()];
          fis = new FileInputStream(myFile);
          bis = new BufferedInputStream(fis);
          bis.read(mybytearray,0,mybytearray.length);
          os = sock.getOutputStream();
          System.out.println("Sending " + FILE_TO_SEND + "(" + mybytearray.length + " bytes)");
          os.write(mybytearray,0,mybytearray.length);
          os.flush();
          System.out.println("Done.");
        }
        finally {
          if (bis != null) bis.close();
          if (os != null) os.close();
          if (sock!=null) sock.close();
        }
      }
    }
    finally {
      if (servsock != null) servsock.close();
    }
  }
}

客户端代码:

import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.Socket;

public class SimpleFileClient {

          public final static int SOCKET_PORT = 13267;     
          public final static String SERVER = "127.0.0.1";  
          public final static String FILE_TO_RECEIVED = "c:/temp/xyz.txt";  

public final static int FILE_SIZE = 6022386;  

  public static void main (String [] args ) throws IOException {
    int bytesRead;
    int current = 0;
    FileOutputStream fos = null;
    BufferedOutputStream bos = null;
    Socket sock = null;
    try {
      sock = new Socket(SERVER, SOCKET_PORT);
      System.out.println("Connecting...");

      // receive file
      byte [] mybytearray  = new byte [FILE_SIZE];
      InputStream is = sock.getInputStream();
      fos = new FileOutputStream(FILE_TO_RECEIVED);
      bos = new BufferedOutputStream(fos);
      bytesRead = is.read(mybytearray,0,mybytearray.length);
      current = bytesRead;

      do {
         bytesRead =
            is.read(mybytearray, current, (mybytearray.length-current));
         if(bytesRead >= 0) current += bytesRead;
      } while(bytesRead > -1);

      bos.write(mybytearray, 0 , current);
      bos.flush();
      System.out.println("File " + FILE_TO_RECEIVED
          + " downloaded (" + current + " bytes read)");
    }
    finally {
      if (fos != null) fos.close();
      if (bos != null) bos.close();
      if (sock != null) sock.close();
    }
  }

}

最佳答案

您可以使用GZIPInputStreamGZIPOutputStream分别装饰输入输出流。

关于java - 我如何编辑此代码,以便服务器在发送到客户端之前压缩文件,客户端在接收后解压缩该文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29532201/

相关文章:

java - Spring JPA 存储库仅在结果已存在时获取 id 而不是完整对象

java - 如何通过 URL base 拦截请求?

java - 改造没有端点的 2 GET 请求?

compression - GZipStream无法检测到损坏的数据(甚至CRC32传递)?

java(安卓): try compressed I/O and failed

java - 长时间运行的Web服务架构

python - 如何使用 Python Popen 压缩 mysqldump

BlackBerry - 解压 Zip 文件

Android Studio - 出现错误 : java. util.zip.ZipException:只有 DEFLATED 条目可以有 EXT 描述符

python - BASH 和 Python