JSCH - запись в удаленный поток при чтении из удаленного потока - PullRequest
1 голос
/ 12 апреля 2020

Я хочу получить входной поток удаленного файла и зашифровать его байтовые данные, не загружая файл, а просто используя объект InputStream, возвращаемый следующим методом.

  1. sftpChannel.get ( "...");

Ниже приведен пример кода того, что я пытаюсь сделать. Вот мой код:

InputStream is = null;
OutputStream os = null;
try {
    is = sftpChannel.get("/.../decrypted.txt");
    os = sftpChannel.put("/.../ftp_encrypted.txt", ChannelSftp.OVERWRITE);

    int byteRead = is.read();
    while (byteRead != -1) {

        os.write(((byte) byteRead) << 2); //encrypt the byte in some way
        os.flush();
        byteRead = is.read();
    }
    is.close();
} catch (Exception e) {

    e.printStackTrace();
} finally {

    if (is != null) {
        is.close();

    }

    if (os != null) {
        os.close();

    }
}

Я думал, что этого должно быть достаточно, но я получаю IOException:

java .io.IOException: 1: Конец файла at com.jcraft.jsch.ChannelSftp $ 1.flu sh (ChannelSftp. java: 858)

Кажется, проблема связана с сбросом объекта OutputStream. Удаление вызова метода .flu sh () не помогает.

Есть предложения? Благодаря.

1 Ответ

1 голос
/ 12 апреля 2020

В конце концов, единственный способ достичь моей цели - создать два SFTP-канала, один для входа и один для выхода. Создавая интерфейс и скрывая эти два канала, я могу делать все, что захочу, без каких-либо мыслей.

Спасибо за совет, Торбьерн Равн Андерсен

...