Мне кажется, я понимаю разницу между режимом ASCII и бинарным режимом при обычной передаче по FTP - в бинарном режиме файл копируется точно, а в режиме ASCII клиент может изменять окончания строк (удаление возврата каретки из Windows -> UNIX или добавив его в другом направлении). Однако я подумал, что протокол SFTP поддерживает только передачи в двоичном режиме; исходный файл не будет изменен.
Однако при использовании библиотеки JSch для копирования файла из Windows в UNIX окончания строк в стиле Windows удаляются. Это проблематично, потому что эти файлы извлекаются другими компьютерами Windows различными способами, и я не могу гарантировать, что их клиенты будут повторно добавлять возврат каретки перед каждым переводом строки.
Properties properties = new Properties();
properties.setProperty("StrictHostKeyChecking", "no");
Session session = jsch.getSession(UserName, Address, Port);
session.setPassword(Password);
session.setConfig(properties);
session.connect();
ChannelSftp channel = (ChannelSftp)session.openChannel("sftp");
channel.connect();
channel.
channel.cd(SCPDir);
channel.put(new ByteArrayInputStream(WindowsStyleString.getBytes()), FileName);
channel.disconnect();
session.disconnect();
Что я могу сделать, чтобы JSch точно передавал файлы? К сожалению, в документации не хватает, поэтому я не уверен, есть ли какой-либо параметр его или, возможно, какое-то дополнительное свойство SSH, которое я могу указать для дословной передачи. И почему это вообще происходит в первую очередь, когда модификации стиля режима ASCII не являются частью стандарта SFTP?