使用 MIME 编码文件时出错
Error encoding files with MIME
我做了一个 class 来编码和解码 base64 文件。这 class 有效。我正在尝试对 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));
而我的 class 只适用于 txt 文件。
方法"Base64.getMimeEncoder().encodeToString(xxxx)" returns编码器使用MIME类型base64编码方案编码而"Base64.getEncoder().encodeToString(xxxx)"使用Basic Type base64编码方案。默认 mime 是:text/plain。请参阅 url: https://en.wikipedia.org/wiki/MIME 进一步参考
我会尝试使用Encoder/Decoder的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();
}
免责声明:我脑子里写的,未经测试。
我做了一个 class 来编码和解码 base64 文件。这 class 有效。我正在尝试对 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));
而我的 class 只适用于 txt 文件。
方法"Base64.getMimeEncoder().encodeToString(xxxx)" returns编码器使用MIME类型base64编码方案编码而"Base64.getEncoder().encodeToString(xxxx)"使用Basic Type base64编码方案。默认 mime 是:text/plain。请参阅 url: https://en.wikipedia.org/wiki/MIME 进一步参考
我会尝试使用Encoder/Decoder的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();
}
免责声明:我脑子里写的,未经测试。