Сейчас я пишу программу, которая должна получать файлы из одного API и отправлять их в другой. Я подумал, что было бы неплохо просто взять поток байтов и передать его непосредственно из ответа в запрос, поскольку я избегаю повторного сохранения всего файла в byte[] в памяти, а также избегаю дорогостоящих операций записи файловой системы/ читает.
И это работает. Иногда...
Иногда я получаю вот такое чудовищное исключение:
// Application Exception ... //
Caused by: java.io.UncheckedIOException: java.io.IOException: c l o s e d < b r / > a t d e . t r i n e x t . l i b . n f . a p i . u t i l . M u l t i P a r t B o d y P u b l i s h e r $ P a r t s I t e r a t o r . h a s N e x t ( M u l t i P a r t B o d y P u b l i s h e r . j a v a : 1 2 1 ) < b r / > a t j a v a . n e t . h t t p / j d k . i n t e r n a l . n e t . h t t p . R e q u e s t P u b l i s h e r s $ I t e r a b l e P u b l i s h e r $ B y t e B u f f e r I t e r a t o r . h a s N e x t ( R e q u e s t P u b l i s h e r s . j a v a : 1 3 5 ) < b r / > a t j a v a . n e t . h t t p / j d k . i n t e r n a l . n e t . h t t p . P u l l P u b l i s h e r $ S u b s c r i p t i o n $ P u l l T a s k . r u n ( P u l l P u b l i s h e r . j a v a : 1 2 0 ) < b r / > a t j a v a . n e t . h t t p / j d k . i n t e r n a l . n e t . h t t p . c o m m o n . S e q u e n t i a l S c h e d u l e r $ C o m p l e t e R e s t a r t a b l e T a s k . r u n ( S e q u e n t i a l S c h e d u l e r . j a v a : 1 4 9 ) < b r / > a t j a v a . n e t . h t t p / j d k . i n t e r n a l . n e t . h t t p . c o m m o n . S e q u e n t i a l S c h e d u l e r $ S c h e d u l a b l e T a s k . r u n ( S e q u e n t i a l S c h e d u l e r . j a v a : 2 0 7 ) < b r / > a t j a v a . n e t . h t t p / j d k . i n t e r n a l . n e t . h t t p . c o m m o n . S e q u e n t i a l S c h e d u l e r . r u n O r S c h e d u l e ( S e q u e n t i a l S c h e d u l e r . j a v a : 2 8 0 ) < b r / > a t j a v a . n e t . h t t p / j d k . i n t e r n a l . n e t . h t t p . c o m m o n . S e q u e n t i a l S c h e d u l e r . r u n O r S c h e d u l e ( S e q u e n t i a l S c h e d u l e r . j a v a : 2 3 3 ) < b r / > a t j a v a . n e t . h t t p / j d k . i n t e r n a l . n e t . h t t p . P u l l P u b l i s h e r $ S u b s c r i p t i o n . r e q u e s t ( P u l l P u b l i s h e r . j a v a : 1 3 8 ) < b r / > a t j a v a . n e t . h t t p / j d k . i n t e r n a l . n e t . h t t p . S t r e a m $ R e q u e s t S u b s c r i b e r.trySend(Stream.java:1132)
at java.net.http/jdk.internal.net.http.common.SequentialScheduler$LockingRestartableTask.run(SequentialScheduler.java:182)
at java.net.http/jdk.internal.net.http.common.SequentialScheduler$CompleteRestartableTask.run(SequentialScheduler.java:149)
at java.net.http/jdk.internal.net.http.common.SequentialScheduler$TryEndDeferredCompleter.complete(SequentialScheduler.java:324)
at java.net.http/jdk.internal.net.http.common.SequentialScheduler$CompleteRestartableTask.run(SequentialScheduler.java:151)
at java.net.http/jdk.internal.net.http.common.SequentialScheduler$SchedulableTask.run(SequentialScheduler.java:207)
at java.net.http/jdk.internal.net.http.common.SequentialScheduler.runOrSchedule(SequentialScheduler.java:280)
at java.net.http/jdk.internal.net.http.common.SequentialScheduler.runOrSchedule(SequentialScheduler.java:233)
at java.net.http/jdk.internal.net.http.Stream.signalWindowUpdate(Stream.java:967)
at java.net.http/jdk.internal.net.http.WindowController.increaseStreamWindow(WindowController.java:275)
at java.net.http/jdk.internal.net.http.Stream.incoming_windowUpdate(Stream.java:714)
at java.net.http/jdk.internal.net.http.Stream.otherFrame(Stream.java:508)
at java.net.http/jdk.internal.net.http.Stream.incoming(Stream.java:502)
at java.net.http/jdk.internal.net.http.Http2Connection.processFrame(Http2Connection.java:1051)
at java.net.http/jdk.internal.net.http.frame.FramesDecoder.decode(FramesDecoder.java:155)
at java.net.http/jdk.internal.net.http.Http2Connection$FramesController.processReceivedData(Http2Connection.java:310)
at java.net.http/jdk.internal.net.http.Http2Connection.asyncReceive(Http2Connection.java:859)
at java.net.http/jdk.internal.net.http.Http2Connection$Http2TubeSubscriber.processQueue(Http2Connection.java:1756)
at java.net.http/jdk.internal.net.http.common.SequentialScheduler$LockingRestartableTask.run(SequentialScheduler.java:182)
at java.net.http/jdk.internal.net.http.common.SequentialScheduler$CompleteRestartableTask.run(SequentialScheduler.java:149)
at java.net.http/jdk.internal.net.http.common.SequentialScheduler$SchedulableTask.run(SequentialScheduler.java:207)
at java.net.http/jdk.internal.net.http.common.SequentialScheduler.runOrSchedule(SequentialScheduler.java:280)
at java.net.http/jdk.internal.net.http.common.SequentialScheduler.runOrSchedule(SequentialScheduler.java:233)
at java.net.http/jdk.internal.net.http.Http2Connection$Http2TubeSubscriber.runOrSchedule(Http2Connection.java:1773)
at java.net.http/jdk.internal.net.http.Http2Connection$Http2TubeSubscriber.onNext(Http2Connection.java:1800)
at java.net.http/jdk.internal.net.http.Http2Connection$Http2TubeSubscriber.onNext(Http2Connection.java:1734)
at java.net.http/jdk.internal.net.http.common.SSLTube$DelegateWrapper.onNext(SSLTube.java:210)
at java.net.http/jdk.internal.net.http.common.SSLTube$SSLSubscriberWrapper.onNext(SSLTube.java:492)
at java.net.http/jdk.internal.net.http.common.SSLTube$SSLSubscriberWrapper.onNext(SSLTube.java:295)
at java.net.http/jdk.internal.net.http.common.SubscriberWrapper$DownstreamPusher.run1(SubscriberWrapper.java:316)
at java.net.http/jdk.internal.net.http.common.SubscriberWrapper$DownstreamPusher.run(SubscriberWrapper.java:259)
at java.net.http/jdk.internal.net.http.common.SequentialScheduler$LockingRestartableTask.run(SequentialScheduler.java:182)
at java.net.http/jdk.internal.net.http.common.SequentialScheduler$CompleteRestartableTask.run(SequentialScheduler.java:149)
at java.net.http/jdk.internal.net.http.common.SequentialScheduler$SchedulableTask.run(SequentialScheduler.java:207)
at java.net.http/jdk.internal.net.http.common.SequentialScheduler.runOrSchedule(SequentialScheduler.java:280)
at java.net.http/jdk.internal.net.http.common.SequentialScheduler.runOrSchedule(SequentialScheduler.java:233)
at java.net.http/jdk.internal.net.http.common.SubscriberWrapper.outgoing(SubscriberWrapper.java:232)
at java.net.http/jdk.internal.net.http.common.SubscriberWrapper.outgoing(SubscriberWrapper.java:198)
at java.net.http/jdk.internal.net.http.common.SSLFlowDelegate$Reader.processData(SSLFlowDelegate.java:465)
at java.net.http/jdk.internal.net.http.common.SSLFlowDelegate$Reader$ReaderDownstreamPusher.run(SSLFlowDelegate.java:283)
at java.net.http/jdk.internal.net.http.common.SequentialScheduler$LockingRestartableTask.run(SequentialScheduler.java:182)
at java.net.http/jdk.internal.net.http.common.SequentialScheduler$CompleteRestartableTask.run(SequentialScheduler.java:149)
at java.net.http/jdk.internal.net.http.common.SequentialScheduler$SchedulableTask.run(SequentialScheduler.java:207)
... 3 more
Caused by: java.io.IOException: closed
at java.net.http/jdk.internal.net.http.ResponseSubscribers$HttpResponseInputStream.current(ResponseSubscribers.java:464)
at java.net.http/jdk.internal.net.http.ResponseSubscribers$HttpResponseInputStream.read(ResponseSubscribers.java:508)
at java.base/java.io.InputStream.read(InputStream.java:220)
at de.trinext.lib.nf.api.util.MultiPartBodyPublisher$PartsIterator.computeNext(MultiPartBodyPublisher.java:175)
at de.trinext.lib.nf.api.util.MultiPartBodyPublisher$PartsIterator.hasNext(MultiPartBodyPublisher.java:119)
... 53 more
Caused by: java.io.IOException: fixed content-length: 2861131, bytes received: 1539620
at java.net.http/jdk.internal.net.http.common.Utils.wrapWithExtraDetail(Utils.java:391)
at java.net.http/jdk.internal.net.http.Http1Response$BodyReader.onReadError(Http1Response.java:676)
at java.net.http/jdk.internal.net.http.Http1AsyncReceiver.checkForErrors(Http1AsyncReceiver.java:302)
at java.net.http/jdk.internal.net.http.Http1AsyncReceiver.flush(Http1AsyncReceiver.java:268)
at java.net.http/jdk.internal.net.http.common.SequentialScheduler$LockingRestartableTask.run(SequentialScheduler.java:182)
at java.net.http/jdk.internal.net.http.common.SequentialScheduler$CompleteRestartableTask.run(SequentialScheduler.java:149)
at java.net.http/jdk.internal.net.http.common.SequentialScheduler$SchedulableTask.run(SequentialScheduler.java:207)
at java.net.http/jdk.internal.net.http.HttpClientImpl$DelegatingExecutor.execute(HttpClientImpl.java:177)
at java.net.http/jdk.internal.net.http.common.SequentialScheduler.runOrSchedule(SequentialScheduler.java:282)
at java.net.http/jdk.internal.net.http.common.SequentialScheduler.runOrSchedule(SequentialScheduler.java:251)
at java.net.http/jdk.internal.net.http.Http1AsyncReceiver.onReadError(Http1AsyncReceiver.java:516)
at java.net.http/jdk.internal.net.http.Http1AsyncReceiver$Http1TubeSubscriber.onError(Http1AsyncReceiver.java:595)
at java.net.http/jdk.internal.net.http.common.SSLTube$DelegateWrapper.onError(SSLTube.java:257)
at java.net.http/jdk.internal.net.http.common.SSLTube$SSLSubscriberWrapper.complete(SSLTube.java:441)
at java.net.http/jdk.internal.net.http.common.SSLTube$SSLSubscriberWrapper.onErrorImpl(SSLTube.java:511)
at java.net.http/jdk.internal.net.http.common.SSLTube$SSLSubscriberWrapper.onError(SSLTube.java:525)
at java.net.http/jdk.internal.net.http.common.SubscriberWrapper$DownstreamPusher.run1(SubscriberWrapper.java:294)
at java.net.http/jdk.internal.net.http.common.SubscriberWrapper$DownstreamPusher.run(SubscriberWrapper.java:259)
at java.net.http/jdk.internal.net.http.common.SequentialScheduler$LockingRestartableTask.run(SequentialScheduler.java:182)
at java.net.http/jdk.internal.net.http.common.SequentialScheduler$CompleteRestartableTask.run(SequentialScheduler.java:149)
at java.net.http/jdk.internal.net.http.common.SequentialScheduler$SchedulableTask.run(SequentialScheduler.java:207)
at java.net.http/jdk.internal.net.http.common.SequentialScheduler.runOrSchedule(SequentialScheduler.java:280)
at java.net.http/jdk.internal.net.http.common.SequentialScheduler.runOrSchedule(SequentialScheduler.java:233)
at java.net.http/jdk.internal.net.http.common.SubscriberWrapper.errorCommon(SubscriberWrapper.java:421)
at java.net.http/jdk.internal.net.http.common.SSLFlowDelegate$Reader.errorCommon(SSLFlowDelegate.java:384)
at java.net.http/jdk.internal.net.http.common.SSLFlowDelegate$Reader.processData(SSLFlowDelegate.java:517)
at java.net.http/jdk.internal.net.http.common.SSLFlowDelegate$Reader$ReaderDownstreamPusher.run(SSLFlowDelegate.java:283)
at java.net.http/jdk.internal.net.http.common.SequentialScheduler$LockingRestartableTask.run(SequentialScheduler.java:182)
at java.net.http/jdk.internal.net.http.common.SequentialScheduler$CompleteRestartableTask.run(SequentialScheduler.java:149)
at java.net.http/jdk.internal.net.http.common.SequentialScheduler$SchedulableTask.run(SequentialScheduler.java:207)
at java.base/java.util.concurrent.ThreadPerTaskExecutor$TaskRunner.run(ThreadPerTaskExecutor.java:314)
at java.base/java.lang.VirtualThread.run(VirtualThread.java:329)
Caused by: java.io.IOException: BUFFER_UNDERFLOW with EOF, 8570 bytes non decrypted.
at java.net.http/jdk.internal.net.http.common.SSLFlowDelegate$Reader.processData(SSLFlowDelegate.java:487)
... 6 more
Я не совсем понимаю, почему эта проблема возникает редко для одинаковых запросов. Программа выглядит примерно так:
Извлечь файл
Сохранить входной поток из HttpResponse.BodyHandlers.ofInputStream( ) в переменной
Отправьте входной поток в качестве поставщика для этой реализации MultiPartBodyPublisher.
Отправить запрос с использованием java.net.http.HttpRequest.Builder.POST(BodyPublisher)
Сейчас я пишу программу, которая должна получать файлы из одного API и отправлять их в другой. Я подумал, что было бы неплохо просто взять поток байтов и передать его непосредственно из ответа в запрос, поскольку я избегаю повторного сохранения всего файла в byte[] в памяти, а также избегаю дорогостоящих операций записи файловой системы/ читает. И это работает. Иногда... Иногда я получаю вот такое чудовищное исключение: [code]// Application Exception ... // Caused by: java.io.UncheckedIOException: java.io.IOException: c l o s e d < b r / > a t d e . t r i n e x t . l i b . n f . a p i . u t i l . M u l t i P a r t B o d y P u b l i s h e r $ P a r t s I t e r a t o r . h a s N e x t ( M u l t i P a r t B o d y P u b l i s h e r . j a v a : 1 2 1 ) < b r / > a t j a v a . n e t . h t t p / j d k . i n t e r n a l . n e t . h t t p . R e q u e s t P u b l i s h e r s $ I t e r a b l e P u b l i s h e r $ B y t e B u f f e r I t e r a t o r . h a s N e x t ( R e q u e s t P u b l i s h e r s . j a v a : 1 3 5 ) < b r / > a t j a v a . n e t . h t t p / j d k . i n t e r n a l . n e t . h t t p . P u l l P u b l i s h e r $ S u b s c r i p t i o n $ P u l l T a s k . r u n ( P u l l P u b l i s h e r . j a v a : 1 2 0 ) < b r / > a t j a v a . n e t . h t t p / j d k . i n t e r n a l . n e t . h t t p . c o m m o n . S e q u e n t i a l S c h e d u l e r $ C o m p l e t e R e s t a r t a b l e T a s k . r u n ( S e q u e n t i a l S c h e d u l e r . j a v a : 1 4 9 ) < b r / > a t j a v a . n e t . h t t p / j d k . i n t e r n a l . n e t . h t t p . c o m m o n . S e q u e n t i a l S c h e d u l e r $ S c h e d u l a b l e T a s k . r u n ( S e q u e n t i a l S c h e d u l e r . j a v a : 2 0 7 ) < b r / > a t j a v a . n e t . h t t p / j d k . i n t e r n a l . n e t . h t t p . c o m m o n . S e q u e n t i a l S c h e d u l e r . r u n O r S c h e d u l e ( S e q u e n t i a l S c h e d u l e r . j a v a : 2 8 0 ) < b r / > a t j a v a . n e t . h t t p / j d k . i n t e r n a l . n e t . h t t p . c o m m o n . S e q u e n t i a l S c h e d u l e r . r u n O r S c h e d u l e ( S e q u e n t i a l S c h e d u l e r . j a v a : 2 3 3 ) < b r / > a t j a v a . n e t . h t t p / j d k . i n t e r n a l . n e t . h t t p . P u l l P u b l i s h e r $ S u b s c r i p t i o n . r e q u e s t ( P u l l P u b l i s h e r . j a v a : 1 3 8 ) < b r / > a t j a v a . n e t . h t t p / j d k . i n t e r n a l . n e t . h t t p . S t r e a m $ R e q u e s t S u b s c r i b e r.trySend(Stream.java:1132) at java.net.http/jdk.internal.net.http.common.SequentialScheduler$LockingRestartableTask.run(SequentialScheduler.java:182) at java.net.http/jdk.internal.net.http.common.SequentialScheduler$CompleteRestartableTask.run(SequentialScheduler.java:149) at java.net.http/jdk.internal.net.http.common.SequentialScheduler$TryEndDeferredCompleter.complete(SequentialScheduler.java:324) at java.net.http/jdk.internal.net.http.common.SequentialScheduler$CompleteRestartableTask.run(SequentialScheduler.java:151) at java.net.http/jdk.internal.net.http.common.SequentialScheduler$SchedulableTask.run(SequentialScheduler.java:207) at java.net.http/jdk.internal.net.http.common.SequentialScheduler.runOrSchedule(SequentialScheduler.java:280) at java.net.http/jdk.internal.net.http.common.SequentialScheduler.runOrSchedule(SequentialScheduler.java:233) at java.net.http/jdk.internal.net.http.Stream.signalWindowUpdate(Stream.java:967) at java.net.http/jdk.internal.net.http.WindowController.increaseStreamWindow(WindowController.java:275) at java.net.http/jdk.internal.net.http.Stream.incoming_windowUpdate(Stream.java:714) at java.net.http/jdk.internal.net.http.Stream.otherFrame(Stream.java:508) at java.net.http/jdk.internal.net.http.Stream.incoming(Stream.java:502) at java.net.http/jdk.internal.net.http.Http2Connection.processFrame(Http2Connection.java:1051) at java.net.http/jdk.internal.net.http.frame.FramesDecoder.decode(FramesDecoder.java:155) at java.net.http/jdk.internal.net.http.Http2Connection$FramesController.processReceivedData(Http2Connection.java:310) at java.net.http/jdk.internal.net.http.Http2Connection.asyncReceive(Http2Connection.java:859) at java.net.http/jdk.internal.net.http.Http2Connection$Http2TubeSubscriber.processQueue(Http2Connection.java:1756) at java.net.http/jdk.internal.net.http.common.SequentialScheduler$LockingRestartableTask.run(SequentialScheduler.java:182) at java.net.http/jdk.internal.net.http.common.SequentialScheduler$CompleteRestartableTask.run(SequentialScheduler.java:149) at java.net.http/jdk.internal.net.http.common.SequentialScheduler$SchedulableTask.run(SequentialScheduler.java:207) at java.net.http/jdk.internal.net.http.common.SequentialScheduler.runOrSchedule(SequentialScheduler.java:280) at java.net.http/jdk.internal.net.http.common.SequentialScheduler.runOrSchedule(SequentialScheduler.java:233) at java.net.http/jdk.internal.net.http.Http2Connection$Http2TubeSubscriber.runOrSchedule(Http2Connection.java:1773) at java.net.http/jdk.internal.net.http.Http2Connection$Http2TubeSubscriber.onNext(Http2Connection.java:1800) at java.net.http/jdk.internal.net.http.Http2Connection$Http2TubeSubscriber.onNext(Http2Connection.java:1734) at java.net.http/jdk.internal.net.http.common.SSLTube$DelegateWrapper.onNext(SSLTube.java:210) at java.net.http/jdk.internal.net.http.common.SSLTube$SSLSubscriberWrapper.onNext(SSLTube.java:492) at java.net.http/jdk.internal.net.http.common.SSLTube$SSLSubscriberWrapper.onNext(SSLTube.java:295) at java.net.http/jdk.internal.net.http.common.SubscriberWrapper$DownstreamPusher.run1(SubscriberWrapper.java:316) at java.net.http/jdk.internal.net.http.common.SubscriberWrapper$DownstreamPusher.run(SubscriberWrapper.java:259) at java.net.http/jdk.internal.net.http.common.SequentialScheduler$LockingRestartableTask.run(SequentialScheduler.java:182) at java.net.http/jdk.internal.net.http.common.SequentialScheduler$CompleteRestartableTask.run(SequentialScheduler.java:149) at java.net.http/jdk.internal.net.http.common.SequentialScheduler$SchedulableTask.run(SequentialScheduler.java:207) at java.net.http/jdk.internal.net.http.common.SequentialScheduler.runOrSchedule(SequentialScheduler.java:280) at java.net.http/jdk.internal.net.http.common.SequentialScheduler.runOrSchedule(SequentialScheduler.java:233) at java.net.http/jdk.internal.net.http.common.SubscriberWrapper.outgoing(SubscriberWrapper.java:232) at java.net.http/jdk.internal.net.http.common.SubscriberWrapper.outgoing(SubscriberWrapper.java:198) at java.net.http/jdk.internal.net.http.common.SSLFlowDelegate$Reader.processData(SSLFlowDelegate.java:465) at java.net.http/jdk.internal.net.http.common.SSLFlowDelegate$Reader$ReaderDownstreamPusher.run(SSLFlowDelegate.java:283) at java.net.http/jdk.internal.net.http.common.SequentialScheduler$LockingRestartableTask.run(SequentialScheduler.java:182) at java.net.http/jdk.internal.net.http.common.SequentialScheduler$CompleteRestartableTask.run(SequentialScheduler.java:149) at java.net.http/jdk.internal.net.http.common.SequentialScheduler$SchedulableTask.run(SequentialScheduler.java:207) ... 3 more Caused by: java.io.IOException: closed at java.net.http/jdk.internal.net.http.ResponseSubscribers$HttpResponseInputStream.current(ResponseSubscribers.java:464) at java.net.http/jdk.internal.net.http.ResponseSubscribers$HttpResponseInputStream.read(ResponseSubscribers.java:508) at java.base/java.io.InputStream.read(InputStream.java:220) at de.trinext.lib.nf.api.util.MultiPartBodyPublisher$PartsIterator.computeNext(MultiPartBodyPublisher.java:175) at de.trinext.lib.nf.api.util.MultiPartBodyPublisher$PartsIterator.hasNext(MultiPartBodyPublisher.java:119) ... 53 more Caused by: java.io.IOException: fixed content-length: 2861131, bytes received: 1539620 at java.net.http/jdk.internal.net.http.common.Utils.wrapWithExtraDetail(Utils.java:391) at java.net.http/jdk.internal.net.http.Http1Response$BodyReader.onReadError(Http1Response.java:676) at java.net.http/jdk.internal.net.http.Http1AsyncReceiver.checkForErrors(Http1AsyncReceiver.java:302) at java.net.http/jdk.internal.net.http.Http1AsyncReceiver.flush(Http1AsyncReceiver.java:268) at java.net.http/jdk.internal.net.http.common.SequentialScheduler$LockingRestartableTask.run(SequentialScheduler.java:182) at java.net.http/jdk.internal.net.http.common.SequentialScheduler$CompleteRestartableTask.run(SequentialScheduler.java:149) at java.net.http/jdk.internal.net.http.common.SequentialScheduler$SchedulableTask.run(SequentialScheduler.java:207) at java.net.http/jdk.internal.net.http.HttpClientImpl$DelegatingExecutor.execute(HttpClientImpl.java:177) at java.net.http/jdk.internal.net.http.common.SequentialScheduler.runOrSchedule(SequentialScheduler.java:282) at java.net.http/jdk.internal.net.http.common.SequentialScheduler.runOrSchedule(SequentialScheduler.java:251) at java.net.http/jdk.internal.net.http.Http1AsyncReceiver.onReadError(Http1AsyncReceiver.java:516) at java.net.http/jdk.internal.net.http.Http1AsyncReceiver$Http1TubeSubscriber.onError(Http1AsyncReceiver.java:595) at java.net.http/jdk.internal.net.http.common.SSLTube$DelegateWrapper.onError(SSLTube.java:257) at java.net.http/jdk.internal.net.http.common.SSLTube$SSLSubscriberWrapper.complete(SSLTube.java:441) at java.net.http/jdk.internal.net.http.common.SSLTube$SSLSubscriberWrapper.onErrorImpl(SSLTube.java:511) at java.net.http/jdk.internal.net.http.common.SSLTube$SSLSubscriberWrapper.onError(SSLTube.java:525) at java.net.http/jdk.internal.net.http.common.SubscriberWrapper$DownstreamPusher.run1(SubscriberWrapper.java:294) at java.net.http/jdk.internal.net.http.common.SubscriberWrapper$DownstreamPusher.run(SubscriberWrapper.java:259) at java.net.http/jdk.internal.net.http.common.SequentialScheduler$LockingRestartableTask.run(SequentialScheduler.java:182) at java.net.http/jdk.internal.net.http.common.SequentialScheduler$CompleteRestartableTask.run(SequentialScheduler.java:149) at java.net.http/jdk.internal.net.http.common.SequentialScheduler$SchedulableTask.run(SequentialScheduler.java:207) at java.net.http/jdk.internal.net.http.common.SequentialScheduler.runOrSchedule(SequentialScheduler.java:280) at java.net.http/jdk.internal.net.http.common.SequentialScheduler.runOrSchedule(SequentialScheduler.java:233) at java.net.http/jdk.internal.net.http.common.SubscriberWrapper.errorCommon(SubscriberWrapper.java:421) at java.net.http/jdk.internal.net.http.common.SSLFlowDelegate$Reader.errorCommon(SSLFlowDelegate.java:384) at java.net.http/jdk.internal.net.http.common.SSLFlowDelegate$Reader.processData(SSLFlowDelegate.java:517) at java.net.http/jdk.internal.net.http.common.SSLFlowDelegate$Reader$ReaderDownstreamPusher.run(SSLFlowDelegate.java:283) at java.net.http/jdk.internal.net.http.common.SequentialScheduler$LockingRestartableTask.run(SequentialScheduler.java:182) at java.net.http/jdk.internal.net.http.common.SequentialScheduler$CompleteRestartableTask.run(SequentialScheduler.java:149) at java.net.http/jdk.internal.net.http.common.SequentialScheduler$SchedulableTask.run(SequentialScheduler.java:207) at java.base/java.util.concurrent.ThreadPerTaskExecutor$TaskRunner.run(ThreadPerTaskExecutor.java:314) at java.base/java.lang.VirtualThread.run(VirtualThread.java:329) Caused by: java.io.IOException: BUFFER_UNDERFLOW with EOF, 8570 bytes non decrypted. at java.net.http/jdk.internal.net.http.common.SSLFlowDelegate$Reader.processData(SSLFlowDelegate.java:487) ... 6 more [/code] Я не совсем понимаю, почему эта проблема возникает редко для одинаковых запросов. Программа выглядит примерно так: [list] [*]Извлечь файл [*]Сохранить входной поток из HttpResponse.BodyHandlers.ofInputStream( ) в переменной [*]Отправьте входной поток в качестве поставщика для этой реализации MultiPartBodyPublisher. [*]Отправить запрос с использованием java.net.http.HttpRequest.Builder.POST(BodyPublisher) [/list]