android: Безопасно ли преобразовывать большие строки в байты и отправлять их по сети? - PullRequest
0 голосов
/ 19 декабря 2018

Я получаю файл, затем преобразую его в строку и заменяю некоторые слова.

С этой строкой я запускаю следующее:

com.hierynomus.smbj.share.File remoteSmbjFile = share.openFile(fileName, EnumSet.of(AccessMask.GENERIC_WRITE), null, s, null, null);
byte[] myFile= template.getBytes("UTF-8");
ByteArrayInputStream bs = new ByteArrayInputStream(myFile);
try (OutputStream outputStream = remoteSmbjFile.getOutputStream();) {
    byte[] buffer = new byte[1024];
    int length;
    while ((length = bs.read(buffer)) > 0) {
        outputStream.write(buffer, 0, length);
    }
}

Файл создается в сетевом расположении и являетсяхорошо (без проблем).Сам файл имеет тип .xml размером 2-10 МБ.

Я использую тип файла xml, чтобы открыть этот файл в слове, если в файле есть один символ, который будет поврежден.

Я просто волнуюсь из-за размера файлов, этот метод приведет к повреждению.

Является ли вышеуказанный метод безопасной практикой, есть ли другие подходы, которые я мог бы использовать?

1 Ответ

0 голосов
/ 19 декабря 2018

Безопасно ли преобразовывать большие строки в байты и отправлять их по сети?

Это зависит.(Ничто не является абсолютно безопасным. Когда-либо.)


Я просто волнуюсь из-за размера файлов, этот метод вызовет повреждение.

Большие размеры файлов не приведет к повреждению .

Однако существует два сценария, в которых могут возникнуть проблемы с файлами большого размера:

  1. Если получатель файлане может или не желает принять файл, превышающий определенный размер, поэтому он может обрезать файл.Если об этом не сообщается отправителю, у вас есть потенциальный источник повреждения.

  2. В сетевых пакетах обычно используется простой механизм обнаружения ошибок на основе CRC для обнаружения пакетов, которые были повреждены втранзит по сетевым ошибкам.Возможно (с очень низкой вероятностью 1 ), что многоразрядное повреждение останется незамеченным.Если вы реализуете передачу файлов поверх TCP-потока (например), вероятность повреждения файла очень мала.

1 - Фактические коэффициенты ошибок трудно предсказать, но если вы передаете терабайты данных, вероятность повреждения из-за необнаруженных сетевых ошибок становится значительной.


Является ли вышеуказанный метод безопасной практикой, есть ли другие подходы, которые я мог бы использовать?

Учитывая, что вы не можете предотвратить ни один из вышеперечисленных сценариев, вам нужен способбыть абсолютно уверенным, что передача большого файла не повредила файл.Обычно это делается с помощью:

  1. Проверка размеров файлов ... которая обнаруживает только усечение
  2. Расчет и сравнение хэшей / контрольных сумм файлов.Если вы используете контрольную сумму с N битами, вероятность случайного искажения незамеченным будет 1 в 2 ^ N.

Обратите внимание, что приведенное выше не зависит от типа файла.

Я понимаю, что существуют стандартные способы размещения надежной цифровой подписи в содержимом файла XML.Проверка такой подписи также может помочь обнаружить случайное повреждение.

...