使用MIME编码文件时出错

时间:2015-07-07 12:31:00

标签: java file base64 mime

我已经创建了一个类来编码和解码base64的文件。这个课有效。我试图用MIME编码器和解码器做同样的事情,但它没有工作,我不知道为什么。

  public void encode64(File input, File output) throws IOException{

    FileInputStream inputStream = new FileInputStream( input);
    FileOutputStream outputStream = new FileOutputStream( output);

    byte buff[] = new byte[300];
    int r = 0;

    while ( ( r = inputStream.read( buff)) > 0 ) {
      byte[] realBuff = Arrays.copyOf( buff, r );
      String b64 = Base64.getEncoder().encodeToString( realBuff);
      outputStream.write( b64.getBytes());
    }

    inputStream.close();
    outputStream.close();

}

public void decode64(File input, File output) throws IOException{

  FileInputStream inputStream = new FileInputStream( input);
  FileOutputStream outputStream = new FileOutputStream( output);

  byte buff[] = new byte[300];
  int r = 0;

  while ( ( r = inputStream.read( buff)) > 0 ) {
    byte[] realBuff = Arrays.copyOf( buff, r );
    outputStream.write( Base64.getDecoder().decode( realBuff));
  }

  inputStream.close();
  outputStream.close();

}

我已经从encode64方法

更改了这一行
String b64 = Base64.getEncoder().encodeToString( realBuff);

代表

String b64 = Base64.getMimeEncoder().encodeToString( realBuff);

并且来自decode64方法

outputStream.write( Base64.getDecoder().decode( realBuff));

outputStream.write( Base64.getMimeDecoder().decode( realBuff));

我的课程只适用于txt文件。

2 个答案:

答案 0 :(得分:0)

方法" Base64.getMimeEncoder()。encodeToString(xxxx)"返回使用MIME类型base64编码方案编码的编码器,而" Base64.getEncoder()。encodeToString(xxxx)"使用Basic Type base64编码方案。默认情况下,mime是:text / plain。请参阅网址:https://en.wikipedia.org/wiki/MIME以获取进一步的参考资料

答案 1 :(得分:0)

我会尝试使用编码器/解码器的wrap(...)方法,即

public void encode64(File input, File output) throws IOException {
    FileInputStream inputStream = new FileInputStream(input);
    FileOutputStream outputStream = new FileOutputStream(output);
    OutputStream encodedStream = Base64.getEncoder().wrap(outputStream);

    byte buff[] = new byte[300];
    int r = 0;
    while ((r = inputStream.read(buff)) > 0) {
      byte[] realBuff = Arrays.copyOf(buff, r);
      encodedStream.write(realBuff);
    }

    inputStream.close();
    encodedStream.close();
}

public void decode64(File input, File output) throws IOException {
  FileInputStream inputStream = new FileInputStream(input);
  FileOutputStream outputStream = new FileOutputStream(output);
  OutputStream decodedStream = Base64.getDecoder().wrap(outputStream);

  byte buff[] = new byte[300];
  int r = 0;
  while ((r = inputStream.read(buff)) > 0) {
    byte[] realBuff = Arrays.copyOf(buff, r);
    decodedStream.write(realBuff);
  }

  inputStream.close();
  decodedStream.close();
}

免责声明:写出我的头脑,未经测试。