Я пытаюсь создать конвертер файлов, который преобразует любой файл в строку Base64, которая сохраняется в файл .txt. Чтобы избежать слишком большого использования памяти при декодировании/кодировании, я использую буфер, который читает файл небольшими порциями.
Я пытаюсь создать конвертер файлов, который преобразует любой файл в строку Base64, которая сохраняется в файл .txt. Чтобы избежать слишком большого использования памяти при декодировании/кодировании, я использую буфер, который читает файл небольшими порциями. [code]import java.io.*; import java.nio.file.Paths; import java.nio.file.Files; import java.util.Base64; import java.util.Base64.Encoder; import java.util.Base64.Decoder; public class Fileconverter { static long CHUNK_SIZE = (long) Math.pow(2, 10); public static void encode(String path){ try { File inputFile = new File(path); File outputFile = new File("tmp.txt");
FileInputStream fis = new FileInputStream(inputFile); FileOutputStream fos = new FileOutputStream(outputFile);
FileInputStream fis = new FileInputStream(inputFile); FileOutputStream fos = new FileOutputStream(outputFile);
Decoder decoder = Base64.getDecoder();
long file_len = inputFile.length(); long filesize = inputFile.length();
while(file_len > 0) { byte[] buf = new byte[(int) Math.min(file_len, CHUNK_SIZE)]; file_len-=fis.read(buf); fos.write(decoder.decode(buf)); System.out.print("\rProcessing: "+Math.round((((file_len*1.0/filesize*1.0)*100)-100)*(-1))+"% "); } fis.close(); fos.close(); } catch (Exception e) { e.printStackTrace(); } } } [/code] The problem is that as soon as the input file requires multiple buffers to get read, it comes out corrupted and I don't know why.