- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
public static byte[] zipAndEncodeToBase64(String filePath) {
File fi = new File(filePath);
byte[] bytesFromFile = safeGetBytesFromFileByName(filePath);
return compressBytesToZip(bytesFromFile, fi.getName());
}
public static byte[] safeGetBytesFromFileByName(String fileName) {
File thisFile = new File(fileName);
StringBuffer stringBufferFromFile = safeGetFileAsStringBuffer(thisFile);
return stringBufferFromFile.toString().getBytes();
}
public static byte[] compressBytesToZip(byte[] bytes, String fileName) {
ByteArrayBuffer bab = saveFileAsZipArchive(bytes, fileName);
return bab.getRawData();
}
public static StringBuffer safeGetFileAsStringBuffer(File file) {
StringBuffer sb = new StringBuffer();
try {
FileReader reader = new FileReader(file);
int c = 0;
while ((c = reader.read()) != -1) {
sb.append(Character.getNumericValue(c));
}
reader.close();
} catch (IOException e) {
System.err.println(e.getMessage());
}
return sb;
}
Читаем бинарный файл и zipуем его. Падало по нехватке памяти в хипе на файле в 8 мб.
gost 28.10.2015 18:33 # 0
3.14159265 28.10.2015 18:33 # +5
roman-kashitsyn 28.10.2015 18:52 # +2
> System.err.println
мдя...
bormand 28.10.2015 19:39 # +2
Landing 28.10.2015 19:45 # +1
1. static методы, которые явно не самостоятельны, т.е. использовать их в отдельности нельзя, они друг от друга зависят.
2. Читаем не текстовый файл а любой (текстовый или бинарный, так описано в тех. задании), но FileReader'ом, предназначенным для чтения текста.
3. Читаем посимвольно (код символа), повторюсь в НЕ текстовом файле. Переводим код символа в char. Работает архимедленно. На выходе хз что. Обратно в файл полученный набор не соберется.
4. Прочитали бинарый файл, как текст, обратно сконвертировали текст в массив байт. Без комментариев.
5. Методов достаточно оставить 2. Первый читает файл. Второй zipует и конвертит в Base64. Иначе выходит то, что выше. Тусование из метода в метод имени файла. Много букв, мало толку, много проблем.
bormand 28.10.2015 19:53 # +1
По-хорошему надо вообще фильтрами на стримах, чтобы в константном объёме памяти файлы любого размера обрабатывать... Загружать файлы целиком в память - моветон, который работает только если файлики маленькие или памяти много...
CHayT 28.10.2015 20:36 # +2
не хочу, хочу читать всё в память
kegdan 29.10.2015 13:03 # +2