Соединение входного потока к outputstream

Вот еще одно решение, которое, хотя и выглядит нелепо, но, я думаю, немного чище и его проще использовать в разных классах AM :: Base:

    module FTTUtilities
      module ActionMailer
        module ClassMethods
          def smtp_settings
            dict = YAML.load_file(RAILS_ROOT + "/config/custom_mailers.yml")[self.name.underscore]
            @custom_smtp_settings ||= HashWithIndifferentAccess.new(dict)
          end
        end

        module InstanceMethods
          def smtp_settings
            self.class.smtp_settings
          end
        end
      end
    end

пример Mailer:

    class CustomMailer < ActionMailer::Base
        extend FTTUtilites::ActionMailer::ClassMethods
        include FTTUtilites::ActionMailer::InstanceMethods
    end
72
задан Didier L 23 October 2017 в 12:23
поделиться

1 ответ

Тот факт, что вы используете буфер, не означает, что поток должен заполнить этот буфер. Другими словами, это должно быть нормально:

public static void copyStream(InputStream input, OutputStream output)
    throws IOException
{
    byte[] buffer = new byte[1024]; // Adjust if you want
    int bytesRead;
    while ((bytesRead = input.read(buffer)) != -1)
    {
        output.write(buffer, 0, bytesRead);
    }
}

Это должно работать нормально - в основном вызов read будет блокироваться до тех пор, пока не будут доступны некоторые данные, но он не будет ждать, пока все доступны для заполнения буфера.

84
ответ дан 24 November 2019 в 12:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: