рдкреНрд░рд╕реНрддреБрдд рд╣реИ рд╕реНрдкреНрд░рд┐рдВрдЧ рдореЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ

рдирдорд╕реНрдХрд╛рд░, рд╣реЗрдмреНрд░!

рдЗрд╕ рд╣рдлреНрддреЗ рд╣рдо рдкреНрд░рд┐рдВрдЯрд┐рдВрдЧ рд╣рд╛рдЙрд╕ рд╕реЗ рдПрдХ рдирдИ рд╕реНрдкреНрд░рд┐рдВрдЧ 5 рдмреБрдХ рдХреА рдЙрдореНрдореАрдж рдХрд░ рд░рд╣реЗ рд╣реИрдВ:


рд╕реНрдкреНрд░рд┐рдВрдЧ 5 рдХреА рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╡рд┐рд╢реЗрд╖ рдЙрд▓реНрд▓реЗрдЦ рдХреЗ рдпреЛрдЧреНрдп рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдЗрд╕ рд░реВрдкрд░реЗрдЦрд╛ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореИрдЯ рд░рд╛рдпрдмрд▓ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд▓реЗрдЦ рджреНрд╡рд╛рд░рд╛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЙрдкрд░реНрдпреБрдХреНрдд рдкреБрд╕реНрддрдХ рдореЗрдВ, рдЕрдзреНрдпрд╛рдп 11 рдореЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдкреИрдЯрд░реНрди рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИред

рдореИрдЯ рдХреЛ рдЬреЛрд╢ рд▓реЙрдиреНрдЧ рджреНрд╡рд╛рд░рд╛ рд╕рд╣-рд▓реЗрдЦрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬреЛ рдЬрд╛рд╡рд╛ рдФрд░ рд╕реНрдкреНрд░рд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдФрд░ рдорд╣рд╛рди рдкреБрд╕реНрддрдХ, " рдЬрд╛рд╡рд╛ рдЗрди рдж рдХреНрд▓рд╛рдЙрдб " рдХреЗ рд▓реЗрдЦрдХ рдереЗ , рдЬрд┐рд╕реЗ рдкрд┐рдЫрд▓реА рдЧрд░реНрдорд┐рдпреЛрдВ рдореЗрдВ рд░рд┐рд▓реАрдЬрд╝ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рд░рд┐рдПрдХреНрдЯрд┐рд╡ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЙрди рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдЖрдкрдХрд╛ рддрд░реАрдХрд╛ рд╣реИ рдЬреЛ рдЙрдЪреНрдЪ рднрд╛рд░ рдХреЗ рдкреНрд░рддрд┐рд░реЛрдзреА рд╣реИрдВред рд╡рд┐рд╢рд╛рд▓ рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рдЕрдм рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рд░реНрд╡рд░ рдЧреИрд░-рдЕрд╡рд░реБрджреНрдз рд╣реИ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЗрдВрддрдЬрд╛рд░ рдирд╣реАрдВ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реАрдзреЗ рдпрд╣ рдирд╣реАрдВ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕рд░реНрд╡рд░ рдкрд░ рдХреИрд╕реЗ рдЪрд▓рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝ рдХрд░рддрд╛ рд╣реИред рдЬрдм рдПрдкреАрдЖрдИ рдХреЛ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд▓рдЧрддрд╛ рд╣реИ, рддреЛ рдЙрд╕реЗ рдЕрднреА рднреА рдЙрдЪрд┐рдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрдиреА рдЪрд╛рд╣рд┐рдПред рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рддрд░реАрдХреЗ рд╕реЗ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдФрд░ рдЦрд╛рд░рд┐рдЬ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдЙрдЪреНрдЪ рдШрдЯрдХреЛрдВ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдпрд╣ рд▓реЛрдб рдХреЗ рддрд╣рдд рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ рддрд╛рдХрд┐ рд╡реЗ рдЗрд╕реЗ рдЗрд╕ рд▓реЛрдб рд╕реЗ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдореБрдХреНрдд рдХрд░ рд╕рдХреЗрдВред рдЗрд╕ рддрдХрдиреАрдХ рдХреЛ рдмреИрдХрдкреНрд░реЗрд╢рд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд╛ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкрд╣рд▓реВред

рд╣рдордиреЗ рдЬреЛрд╢ рд▓реЙрдиреНрдЧ рдХреЗ рд╕рд╛рде рдЗрд╕ рд▓реЗрдЦ рдХрд╛ рд╕рд╣-рд▓реЗрдЦрди рдХрд┐рдпрд╛ред рдЬреЛрд╢ рдПрдХ рдЬрд╛рд╡рд╛ рдЪреИрдВрдкрд┐рдпрди, рд╕реНрдкреНрд░рд┐рдВрдЧ рдбреЗрд╡рд▓рдкрд░ рдПрдбрд╡реЛрдХреЗрдЯ, рдФрд░ рдЖрдорддреМрд░ рдкрд░ рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рд╡реНрдпрдХреНрддрд┐ рд╣реИ рдЬреЛ рдкрд┐рд╡рдЯрд▓ рдореЗрдВ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред рдореИрдВ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рд╕реНрдкреНрд░рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдЬреЛрд╢ рдерд╛ рдЬрд┐рд╕рдиреЗ рдореБрдЭреЗ рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ рджрд┐рдЦрд╛рдпрд╛, рдпрд╣ рдмреЗрд▓реНрдЬрд┐рдпрдо рдореЗрдВ рдбреЗрд╡реЛрдХреНрд╕рдХреНрд╕ рд╕рдореНрдореЗрд▓рди рдореЗрдВ рдерд╛ред рддрдм рд╕реЗ, рд╣рдо рдордЬрдмреВрдд рджреЛрд╕реНрдд рдмрди рдЧрдП рд╣реИрдВ, рд╣рдо рдЬрд╛рд╡рд╛ рдХреЗ рд╢реМрдХреАрди рд╣реИрдВ рдФрд░ рд╢рд╛рдВрдд рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд▓рд┐рдЦрддреЗ рд╣реИрдВред

рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдпрд╛ I / O, I / O, рд╣рдо рдХрд╛рдо рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ ...

рд░рд┐рдПрдХреНрдЯрд┐рд╡ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИ рдЬреЛ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ I / O рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ I / O рдПрдХ рдЫреЛрдЯрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ, рдЬреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ рдмрдбрд╝реЗ рдмрджрд▓рд╛рд╡реЛрдВ рд╕реЗ рднрд░рд╛ рд╣реБрдЖ рд╣реИред рдпрд╣ рд╡рд┐рдЪрд╛рд░ рд╕реНрд╡рдпрдВ рд╕рд░рд▓ рд╣реИ: рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рдЕрдХреНрд╖рдо рдЖрд╡рдВрдЯрди рдХреЗ рд╕рд╛рде рд╕реНрдерд┐рддрд┐ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрди рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдореБрдХреНрдд рдХрд░рдирд╛ рдЬреЛ рд╣рдорд╛рд░реЗ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХреЗ рдмрд┐рдирд╛ рдирд┐рд╖реНрдХреНрд░рд┐рдп рд╣реЛ рдЧрдП рдереЗ, I / O рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣реЗ рдереЗред рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдЗрдирдкреБрдЯ / рдЖрдЙрдЯрдкреБрдЯ I / O рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рд╡рд┐рд░реЛрдз рдХрд░рддрд╛ рд╣реИ: рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдореБрдХреНрдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдирдИ рд╕реВрдЪрдирд╛рдУрдВ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рд╣реИред

рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдХрд┐ рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдФрд░ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдЗрдирдкреБрдЯ / рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рдмреАрдЪ рдХреНрдпрд╛ рд╕рд╛рдорд╛рдиреНрдп рд╣реИ, рдФрд░ рдЙрдирдХреЗ рдмреАрдЪ рдХреНрдпрд╛ рдЕрдВрддрд░ рд╣реИрдВред

рд╣рдо рдПрдХ рд╕рд░рд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓рд┐рдЦреЗрдВрдЧреЗ рдЬреЛ рд╕реНрд░реЛрдд рд╕реЗ рдбреЗрдЯрд╛ рдкрдврд╝рддрд╛ рд╣реИ (рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рд╣рдо java.io.File рд▓рд┐рдВрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ)ред рдЖрдЗрдП рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░реЗрдВ рдЬреЛ рдЕрдЪреНрдЫреЗ рдкреБрд░рд╛рдиреЗ java.io.InputStream рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ:

рдЙрджрд╛рд╣рд░рдг 1. рдХрд┐рд╕реА рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдбреЗрдЯрд╛ рдХреЛ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝ рдХрд░рдирд╛

 package com.example.io; import lombok.extern.log4j.Log4j2; import org.springframework.util.FileCopyUtils; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.util.function.Consumer; @Log4j2 class Synchronous implements Reader { @Override public void read(File file, Consumer<BytesPayload> consumer) throws IOException { try (FileInputStream in = new FileInputStream(file)) { //1 byte[] data = new byte[FileCopyUtils.BUFFER_SIZE]; int res; while ((res = in.read(data, 0, data.length)) != -1) { //2 consumer.accept(BytesPayload.from(data, res)); //3 } } } } 

  1. рд╣рдо рд╕рд╛рдорд╛рдиреНрдп java.io.File рд╕рд╛рде рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рд╛рдЗрд▓ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ
  2. рдПрдХ рд╕рдордп рдореЗрдВ рд╕реНрд░реЛрдд рдПрдХ рдкрдВрдХреНрддрд┐ рд╕реЗ рдкрд░рд┐рдгрд╛рдо рдЦреАрдВрдЪреЗрдВ ...
  3. рдореИрдВрдиреЗ рдпрд╣ рдХреЛрдб Consumer<BytesPayloadgt; рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрд╛ рдерд╛ Consumer<BytesPayloadgt; рдирдпрд╛ рдбреЗрдЯрд╛ рдЖрдиреЗ рдкрд░ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ

рдХрд╛рдлреА рд╕рд░рд▓, рдЖрдк рдХреНрдпрд╛ рдХрд╣рддреЗ рд╣реИрдВ? рдЗрд╕ рдХреЛрдб рдХреЛ рдЪрд▓рд╛рдПрдВ рдФрд░ рдЖрдк рд▓реЙрдЧ рдЖрдЙрдЯрдкреБрдЯ (рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдХреЗ рдмрд╛рдИрдВ рдУрд░) рдореЗрдВ рджреЗрдЦреЗрдВрдЧреЗ, рдпрд╣ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рд╕рднреА рдХреНрд░рд┐рдпрд╛рдПрдВ рдПрдХ рд╣реА рдереНрд░реЗрдб рдореЗрдВ рд╣реЛрддреА рд╣реИрдВред
рдпрд╣рд╛рдВ рд╣рдо рд╕реНрд░реЛрдд рдореЗрдВ рд▓рд┐рдП рдЧрдП рд╣рдорд╛рд░реЗ рдбреЗрдЯрд╛ рд╕реЗ рдмрд╛рдЗрдЯреНрд╕ рдирд┐рдХрд╛рд▓рддреЗ рд╣реИрдВ (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо java.io.FileInputStream рдПрдХ рдЙрдкрд╡рд░реНрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред java.io.InputStream рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИ)ред рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдХреНрдпрд╛ рдЧрд▓рдд рд╣реИ? рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдПрдХ рдЗрдирдкреБрдЯрд╕реНрдЯреНрд░реАрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╣рдорд╛рд░реЗ рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рд╕реНрдерд┐рдд рдбреЗрдЯрд╛ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдлрд╝рд╛рдЗрд▓ рд╣реИ, рдФрд░ рд╣рд╛рд░реНрдб рдбреНрд░рд╛рдЗрд╡ рдХрд╛рд░реНрдп рдХрд░ рд░рд╣рд╛ рд╣реИ, рддреЛ рдпрд╣ рдХреЛрдб рдЕрдкреЗрдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

рд▓реЗрдХрд┐рди, рдЕрдЧрд░ рд╣рдо рдбреЗрдЯрд╛ рдХреЛ File рд╕реЗ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдиреЗрдЯрд╡рд░реНрдХ рд╕реЙрдХреЗрдЯ рд╕реЗ рдкрдврд╝рддреЗ рд╣реИрдВ, рдФрд░ InputStream рджреВрд╕рд░реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ? рдЪрд┐рдВрддрд╛ рдХреА рдХреЛрдИ рдмрд╛рдд рдирд╣реАрдВ! рдмреЗрд╢рдХ, рдЕрдЧрд░ рдиреЗрдЯрд╡рд░реНрдХ рдХреА рдЧрддрд┐ рдЕрд╕реАрдо рд░реВрдк рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ, рддреЛ рдЪрд┐рдВрддрд╛ рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдмрд╛рдд рдирд╣реАрдВ рд╣реЛрдЧреАред рдФрд░ рдЕрдЧрд░ рдЗрд╕ рдФрд░ рджреВрд╕рд░реЗ рдиреЛрдб рдХреЗ рдмреАрдЪ рдиреЗрдЯрд╡рд░реНрдХ рдЪреИрдирд▓ рдХрднреА рд╡рд┐рдлрд▓ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдпрджрд┐ рдпреЗ рд╢рд░реНрддреЗрдВ рдкреВрд░реА рд╣реЛрддреА рд╣реИрдВ, рддреЛ рдХреЛрдб рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдиреЗрдЯрд╡рд░реНрдХ рдзреАрдорд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдпрд╛ рд▓реЗрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ? рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдСрдкрд░реЗрд╢рди рдХреЗ in.read(тАж) рддрдХ рд╣рдо рдЕрд╡рдзрд┐ in.read(тАж) ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╡рд╣ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдЖ рд╕рдХрддреА рд╣реИ! рдпрд╣ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ рдЕрдЧрд░ рд╣рдо рдЙрд╕ рдзрд╛рд░рд╛ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдФрд░ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕рд╕реЗ рд╣рдо рдбреЗрдЯрд╛ рдкрдврд╝ рд░рд╣реЗ рд╣реИрдВред рдмреЗрд╢рдХ, рдЖрдк рд╣рдореЗрд╢рд╛ рдПрдХ рдФрд░ рд╕реНрдЯреНрд░реАрдо рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбреЗрдЯрд╛ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдХреБрдЫ рдмрд┐рдВрджреБ рддрдХ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди, рдЕрдВрдд рдореЗрдВ, рд╣рдо рдЙрд╕ рд╕реАрдорд╛ рддрдХ рдкрд╣реБрдВрдЪ рдЬрд╛рдПрдВрдЧреЗ, рдЬрд┐рд╕ рдкрд░ рдмрд╕ рдЖрдЧреЗ рд╕реНрдХреЗрд▓рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдзрд╛рдЧреЗ рдЬреЛрдбрд╝рдирд╛ рдЕрдм рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рд╣рдорд╛рд░реА рдорд╢реАрди рдкрд░ рдореМрдЬреВрдж рдХреЛрд░ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рдЖрдЧреЗ рд╣рдорд╛рд░реА рд╕рдЪреНрдЪреА рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзрд╛ рдирд╣реАрдВ рд╣реЛрдЧреАред рдореГрдд рдЕрдВрдд! рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░рд╡рд╛рд╣ рдХреЗ рдХрд╛рд░рдг рдХреЗрд╡рд▓ рдЗрдирдкреБрдЯ / рдЖрдЙрдЯрдкреБрдЯ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ (рд░реАрдбрд┐рдВрдЧ рдХрд╛ рдорддрд▓рдм рдпрд╣рд╛рдВ рд╣реИ) рдмрдврд╝рд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рд╣рдо рдЬрд▓реНрдж рдпрд╛ рдмрд╛рдж рдореЗрдВ рд╕реАрдорд╛ рддрдХ рдкрд╣реБрдВрдЪ рдЬрд╛рдПрдВрдЧреЗред

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдХрд╛рдо рдХрд╛ рдореБрдЦреНрдп рдЯреБрдХрдбрд╝рд╛ рдкрдврд╝ рд░рд╣рд╛ рд╣реИ - рдЕрдиреНрдп рдореЛрд░реНрдЪреЛрдВ рдкрд░ рд▓рдЧрднрдЧ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рд╣рдо I / O рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИрдВ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдХрд┐ рдХреИрд╕реЗ рдПрдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕рдорд╛рдзрд╛рди рд╣рдорд╛рд░реЗ рдкреНрд░рд╡рд╛рд╣ рдХреЗ рдПрдХрд╛рдзрд┐рдХрд╛рд░ рдХреЛ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рджреВрд░ рдХрд░рдиреЗ рдореЗрдВ рд╣рдорд╛рд░реА рдорджрдж рдХрд░рддрд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг 2. рдПрдХ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рдбреЗрдЯрд╛ рдкрдврд╝рдирд╛

 package com.example.io; import lombok.extern.log4j.Log4j2; import org.springframework.util.FileCopyUtils; import java.io.File; import java.io.IOException; import java.nio.ByteBuffer; import java.nio.channels.AsynchronousFileChannel; import java.nio.channels.CompletionHandler; import java.nio.file.Path; import java.nio.file.StandardOpenOption; import java.util.Collections; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.function.Consumer; @Log4j2 class Asynchronous implements Reader, CompletionHandler<Integer, ByteBuffer> { private int bytesRead; private long position; private AsynchronousFileChannel fileChannel; private Consumer<BytesPayload> consumer; private final ExecutorService executorService = Executors.newFixedThreadPool(10); public void read(File file, Consumer<BytesPayload> c) throws IOException { this.consumer = c; Path path = file.toPath(); // 1 this.fileChannel = AsynchronousFileChannel.open(path, Collections.singleton(StandardOpenOption.READ), this.executorService); //2 ByteBuffer buffer = ByteBuffer.allocate(FileCopyUtils.BUFFER_SIZE); this.fileChannel.read(buffer, position, buffer, this); //3 while (this.bytesRead > 0) { this.position = this.position + this.bytesRead; this.fileChannel.read(buffer, this.position, buffer, this); } } @Override public void completed(Integer result, ByteBuffer buffer) { //4 this.bytesRead = result; if (this.bytesRead < 0) return; buffer.flip(); byte[] data = new byte[buffer.limit()]; buffer.get(data); //5 consumer.accept(BytesPayload.from(data, data.length)); buffer.clear(); this.position = this.position + this.bytesRead; this.fileChannel.read(buffer, this.position, buffer, this); } @Override public void failed(Throwable exc, ByteBuffer attachment) { log.error(exc); } } 

  1. рдЗрд╕ рдмрд╛рд░ рд╣рдо Java NIO java.nio.file.Path рдмрдирд╛рдиреЗ рд╕реЗ java.io.File рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВ
  2. Channel рдмрдирд╛рддреЗ рд╕рдордп, рд╣рдо, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, java.util.concurrent.ExecutorService рд╕реЗрд╡рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рдкреНрд░рдХрдЯ рд╣реЛрдиреЗ рдкрд░ CompletionHandler рд╣реИрдВрдбрд▓рд░ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛
  3. рд╣рдо CompletionHandler<Integer, ByteBuffer> (this) рд▓рд┐рдВрдХ рдкрд╛рд╕ рдХрд░рдХреЗ рдкрдврд╝рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ
  4. рдХреЙрд▓рдмреИрдХ рдореЗрдВ, рдмрд╛рдЗрдЯ рд╕реЗ рдмрд╛рдЗрдЯреНрд╕ рдХреЛ byte[] рдХреНрд╖рдорддрд╛ рдореЗрдВ рдкрдврд╝реЗрдВ byte[]
  5. рдЬреИрд╕реЗ Synchronous рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, byte[] рдбреЗрдЯрд╛ рдЙрдкрднреЛрдХреНрддрд╛ рдХреЛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╣рдо рддреБрд░рдВрдд рдЖрд░рдХреНрд╖рдг рдХрд░ рджреЗрдВрдЧреЗ: рдпрд╣ рдХреЛрдб рдмрд╣реБрдд рдХрдард┐рди рд╣реЛ рдЧрдпрд╛ рд╣реИ! рдпрд╣рд╛рдБ рдкрд░ рдмрд╣реБрдд рд╕рд╛рд░реА рдЪреАрдЬрд╝реЗрдВ рдЪрд▓ рд░рд╣реА рд╣реИрдВ, рдЬреЛ рдХрд┐ рдЖрдкрдХрд╛ рд╕рд┐рд░ рдПрдХрджрдо рд╕реЗ рдШреВрдо рд░рд╣реА рд╣реИрдВ, рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореБрдЭреЗ рдпрд╣ рдмрддрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП ... рдпрд╣ рдХреЛрдб Java NIO Channel рдбреЗрдЯрд╛ рдХреЛ рдкрдврд╝рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдХреЙрд▓рдмреИрдХ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рдПрдХ рдЕрд▓рдЧ рдереНрд░реЗрдб рдореЗрдВ рдЗрд╕ рдбреЗрдЯрд╛ рдХреЛ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЬрд┐рд╕ рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рдкрдврд╝рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЙрд╕рдХрд╛ рдПрдХрд╛рдзрд┐рдХрд╛рд░ рдирд╣реАрдВ рд╣реИред рд╣рдо рдХреЙрд▓ .read(..) рдмрд╛рдж рд▓рдЧрднрдЧ рддреБрд░рдВрдд рд╡рд╛рдкрд╕ рд▓реМрдЯ рдЖрддреЗ рд╣реИрдВ .read(..) , рдФрд░ рдЬрдм, рдЕрдВрдд рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣рдорд╛рд░реЗ рдирд┐рдкрдЯрд╛рди рдореЗрдВ рдбреЗрдЯрд╛ рд╣реЛрддрд╛ рд╣реИ, рдПрдХ рдХреЙрд▓рдмреИрдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдФрд░ рдзрд╛рдЧреЗ рдореЗрдВред рдпрджрд┐ .read() рдХреЙрд▓ рдХреЗ рдмреАрдЪ рд╡рд┐рд▓рдВрдм рд╣реЛрддрд╛ рд╣реИ .read() рддреЛ рдЖрдк рдЙрдиреНрд╣реЗрдВ рд╣рдорд╛рд░реЗ рдереНрд░реЗрдб рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдХреЗ рдЕрдиреНрдп рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд░реАрдб рдСрдкрд░реЗрд╢рди рдХреА рдЕрд╡рдзрд┐, рдкрд╣рд▓реЗ рдмрд╛рдЗрдЯ рд╕реЗ рд▓реЗрдХрд░ рдЕрдВрддрд┐рдо рддрдХ, рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд░реАрдб рдСрдкрд░реЗрд╢рди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИред рдЖрдорддреМрд░ рдкрд░, рдПрдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдСрдкрд░реЗрд╢рди рдЕрдм рдирдЧрдгреНрдп рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдРрд╕реА рдЕрддрд┐рд░рд┐рдХреНрдд рдХрдард┐рдирд╛рдЗрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЕрдкрдиреЗ рдкреНрд░рд╡рд╛рд╣ рдХреЛ рдЕрдзрд┐рдХ рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ рд╕рдВрднрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдзрд┐рдХ рдХрд╛рдо рдХрд░реЗрдВ, рдереНрд░реЗрдб рдХреА рдПрдХ рд╕реАрдорд┐рдд рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдкреВрд▓ рдореЗрдВ I / O рдХреЛ рдорд▓реНрдЯреАрдкреНрд▓реЗрдХреНрд╕ рдХрд░реЗрдВред

рдореИрдВ рдХреНрд▓рд╛рдЙрдб рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдХрдВрдкрдиреА рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реВрдВред рд╣рдо рдЖрдкрдХреЛ рдХреНрд╖реИрддрд┐рдЬ рд╕реНрдХреЗрд▓рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡реЗрджрди рдХреЗ рдирдП рдЙрджрд╛рд╣рд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ! рдмреЗрд╢рдХ, рдпрд╣рд╛рдВ рдореИрдВ рдереЛрдбрд╝рд╛ рдЕрд╕рдВрддреБрд╖реНрдЯ рд╣реВрдВред рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ I / O рдЪреАрдЬреЛрдВ рдХреЛ рдереЛрдбрд╝рд╛ рдЬрдЯрд┐рд▓ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдХреЛрдб рдХрд┐рддрдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реИ: рдпрд╣ рдЖрдкрдХреЛ рдЕрдзрд┐рдХ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдФрд░ рдЕрдкрдиреЗ рдореМрдЬреВрджрд╛ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдкрд░ рдЕрдзрд┐рдХ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдпрджрд┐ рдкреНрд░рджрд░реНрд╢рди I / O рдкрд░ рдЕрддреНрдпрдзрд┐рдХ рдирд┐рд░реНрднрд░ рд╣реИред рдпрджрд┐ рдкреНрд░рджрд░реНрд╢рди рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рдЙрдкрдпреЛрдЧ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ (рдХрд╣рддреЗ рд╣реИрдВ, рд╣рдо рдлрд╛рдЗрдмреЛрдиреИрдЪрд┐ рд╕рдВрдЦреНрдпрд╛рдУрдВ, рдмрд┐рдЯрдХреЙрдЗрди рдХреЗ рдЦрдирди рдпрд╛ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреА рдкрд░ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ), рддреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╣рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рджреЗрдЧрд╛ред

рд╡рд░реНрддрдорд╛рди рдореЗрдВ, рд╣рдо рдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЕрдкрдиреЗ рджреИрдирд┐рдХ рдХрд╛рд░реНрдп рдореЗрдВ Channel рдпрд╛ InputStream рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ! рд╣рдореЗрдВ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рдЕрдореВрд░реНрддрддрд╛рдУрдВ рдХреЗ рд╕реНрддрд░ рдкрд░ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рд╕рд░рдгрд┐рдпреЛрдВ, рдпрд╛ рдмрд▓реНрдХрд┐, java.util.Collection рдкрджрд╛рдиреБрдХреНрд░рдо рдЬреИрд╕реА рдЪреАрдЬреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред java.util.Collection рд╕рдВрдЧреНрд░рд╣ рдПрдХ рдЗрдирдкреБрдЯрд╕реНрдЯреНрд░реАрдо рдкрд░ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИ: рджреЛрдиреЛрдВ рд╕рдВрд╕реНрдерд╛рдПрдВ рдорд╛рдирддреА рд╣реИрдВ рдХрд┐ рдЖрдк рдПрдХ рдмрд╛рд░ рдореЗрдВ рд╕рднреА рдбреЗрдЯрд╛ рдкрд░ рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рд▓рдЧрднрдЧ рддреБрд░рдВрддред рдпрд╣ рдЙрдореНрдореАрдж рдХреА рдЬрд╛рддреА рд╣реИ рдХрд┐ рдЖрдк рдкрд╣рд▓реЗ рдХреЗ рдмрдЬрд╛рдп рдЬреНрдпрд╛рджрд╛рддрд░ InputStreams рд╕реЗ рд░реАрдбрд┐рдВрдЧ рдЦрддреНрдо рдХрд░ рдкрд╛рдПрдВрдЧреЗред рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдбреЗрдЯрд╛ рд▓реЗ рдЬрд╛рдиреЗ рдкрд░ рд╕рдВрдЧреНрд░рд╣ рдкреНрд░рдХрд╛рд░ рдереЛрдбрд╝рд╛ рдЕрд╕рд╣рдЬ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдк рдХреБрдЫ рд╕рдВрднрд╛рд╡рд┐рдд рдЕрдВрддрд╣реАрди (рдЕрд╕реАрдорд┐рдд) рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡реЗрдм рд╕реЙрдХреЗрдЯ рдпрд╛ рд╕рд░реНрд╡рд░ рдЗрд╡реЗрдВрдЯ? рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдХреЗ рдмреАрдЪ рджреЗрд░реА рд╣реЛрдиреЗ рдкрд░ рдХреНрдпрд╛ рдХрд░реЗрдВ?

рдЗрд╕ рддрд░рд╣ рдХреЗ рдбреЗрдЯрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдПрдХ рдмреЗрд╣рддрд░ рддрд░реАрдХрд╛ рдЪрд╛рд╣рд┐рдПред рд╣рдо рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдШрдЯрдирд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рдЕрдВрдд рдореЗрдВ рдШрдЯрд┐рдд рд╣реЛрдЧреАред рдРрд╕рд╛ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ Future<T> рдпрд╛ CompletableFuture<T> рдЗрд╕ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЕрдиреБрдХреВрд▓ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЕрдВрдд рдореЗрдВ рд╣реЛрддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЬрд╛рд╡рд╛ рдЗрд╕ рддрд░рд╣ рдХреЗ рдбреЗрдЯрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдпреБрдХреНрдд рд░реВрдкрдХ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред Java 8 рд╕реЗ Iterator рдФрд░ Stream рджреЛрдиреЛрдВ рдкреНрд░рдХрд╛рд░ рдЕрд╕рдВрдмрдВрдзрд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдБрдХрд┐, рджреЛрдиреЛрдВ рдЦреАрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдиреНрдореБрдЦ рд╣реИрдВ; рдЖрдк рд╕реНрд╡рдпрдВ рдЕрдЧрд▓реА рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВ, рди рдХрд┐ рдкреНрд░рдХрд╛рд░ рдХреЛ рдЖрдкрдХреЗ рдХреЛрдб рдкрд░ рдХреЙрд▓рдмреИрдХ рднреЗрдЬрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдкреБрд╢-рдЖрдзрд╛рд░рд┐рдд рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬреЛ рдереНрд░реЗрдб рд╕реНрддрд░ рдкрд░ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛, рддреЛ рдПрдкреАрдЖрдИ рдереНрд░реЗрдбрд┐рдВрдЧ рдФрд░ рд╢реЗрдбреНрдпреВрд▓рд┐рдВрдЧ рдирд┐рдпрдВрддреНрд░рдг рднреА рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ред Iterator рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдереНрд░реЗрдбрд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдирд╣реАрдВ рдХрд╣рддреЗ рд╣реИрдВ, рдФрд░ рд╕рднреА рдЬрд╛рд╡рд╛ 8 рдзрд╛рдЧреЗ рдПрдХ рд╣реА рдХрд╛рдВрдЯрд╛-рдЬреБрдбрд╝рдиреЗ рд╡рд╛рд▓реЗ рдкреВрд▓ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рддреЗ рд╣реИрдВред

рдпрджрд┐ Iterator рдФрд░ Stream рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдзрдХреНрдХрд╛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдПрдХ рдФрд░ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░реЗрдВрдЧреЗ, рдЬреЛ рдХрд┐ I / O рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ рд╣реИ: рд╣рдореЗрдВ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдмреИрдХ рдкреИрда рддрдВрддреНрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ! рдЪреВрдВрдХрд┐ рдбреЗрдЯрд╛ рдЙрдкрднреЛрдХреНрддрд╛ рдХреЛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдбреЗрдЯрд╛ рдХрдм рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдореЗрдВ рдФрд░ рдХрд┐рд╕ рдорд╛рддреНрд░рд╛ рдореЗрдВ рд╣реЛрдЧрд╛ред рд╣рдореЗрдВ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЕрдЧрд▓реЗ рдХреЙрд▓рдмреИрдХ рдореЗрдВ рдХрд┐рддрдирд╛ рдбреЗрдЯрд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛: рдПрдХ рдмрд╛рдЗрдЯ рдпрд╛ рдПрдХ рдЯреЗрд░рд╛рдмрд╛рдЗрдЯ!

рдПрдХ InputStream рд╕реЗ рдбреЗрдЯрд╛ рдЦреАрдВрдЪрддреЗ рд╣реБрдП, рдЖрдк рдЙрддрдиреА рд╣реА рдЬрд╛рдирдХрд╛рд░реА рдкрдврд╝рддреЗ рд╣реИрдВ рдЬрд┐рддрдиреА рдЖрдк рдкреНрд░реЛрд╕реЗрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВ, рдФрд░ рдЗрд╕рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВред рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ, рд╣рдо рдбреЗрдЯрд╛ рдХреЛ byte[] рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдФрд░ рдЬреНрдЮрд╛рдд рд▓рдВрдмрд╛рдИ рдХреЗ рдмрдлрд░ рдореЗрдВ рдкрдврд╝рддреЗ рд╣реИрдВред рдПрдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕рдВрджрд░реНрдн рдореЗрдВ, рд╣рдореЗрдВ рдкреНрд░рджрд╛рддрд╛ рдХреЛ рдпрд╣ рдмрддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рддрд░рд╣ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдХрд┐рддрдирд╛ рдбреЗрдЯрд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВред
рдЬреА, рд╕рд░ред рдпрд╣рд╛рдБ рдХреБрдЫ рдпрд╛рдж рдЖ рд░рд╣рд╛ рд╣реИред

рд▓рд╛рдкрддрд╛ рд░реВрдкрдХ рдХреА рдЦреЛрдЬ рдХрд░реЗрдВ

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдПрдХ рд░реВрдкрдХ рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдЦреВрдмрд╕реВрд░рддреА рд╕реЗ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ I / O рдХреЗ рд╕рд╛рд░ рдХреЛ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХрд░реЗрдЧрд╛, рдбреЗрдЯрд╛ рдХреЗ рд░рд┐рд╡рд░реНрд╕ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рддрдВрддреНрд░ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╡рд┐рддрд░рд┐рдд рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдкреНрд░рд╡рд╛рд╣ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ, рдХреНрд▓рд╛рдЗрдВрдЯ рдХреА рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХрд┐ рд╡рд╣ рдХрд┐рд╕ рднрд╛рд░ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ, рдЗрд╕реЗ "рд░рд┐рд╡рд░реНрд╕ рдлреНрд▓реЛ" рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЕрдм рдХрдИ рдЕрдЪреНрдЫреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ рд╣реИрдВ - Vert.x, Akka Streams рдФрд░ RxJava - рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд╛ рд╕рдорд░реНрдердиред рд╕реНрдкреНрд░рд┐рдВрдЧ рдЯреАрдо рд░рд┐рдПрдХреНрдЯрд░ рдирд╛рдордХ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рднреА рдЪрд▓рд╛рддреА рд╣реИред рдЗрди рд╡рд┐рднрд┐рдиреНрди рдорд╛рдирдХреЛрдВ рдХреЗ рдмреАрдЪ рдПрдХ рдХрд╛рдлреА рд╡реНрдпрд╛рдкрдХ рд╕рд╛рдорд╛рдиреНрдп рдХреНрд╖реЗрддреНрд░ рд╣реИ, рдбреА рд░рд┐рдПрдХреНрдЯрд┐рд╡ рд╕реНрдЯреНрд░реАрдо рдкрд╣рд▓ рдорд╛рдирдХ рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдзрд╛рд░рд╛рдУрдВ рдХреА рдкрд╣рд▓ рдЪрд╛рд░ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреА рд╣реИ:

Publisher<T> рдЗрдВрдЯрд░рдлрд╝реЗрд╕ Publisher<T> ; рдЙрди рдореВрд▓реНрдпреЛрдВ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЕрдВрддрддрдГ рдЖ рд╕рдХрддреЗ рд╣реИрдВред Publisher<T> рдЗрдВрдЯрд░рдлрд╝реЗрд╕ Publisher<T> ; Subscriber<T> рд▓рд┐рдП рдЯрд╛рдЗрдк T рдХрд╛ рдорд╛рди рдмрдирд╛рддрд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг 3. рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдзрд╛рд░рд╛рдПрдБ: Publisher<T> рдЗрдВрдЯрд░рдлрд╝реЗрд╕ ред

 package org.reactivestreams; public interface Publisher<T> { void subscribe(Subscriber<? super Tgt; s); } 

Subscriber рдкреНрд░рдХрд╛рд░ Publisher<T> рдХреА Subscriber рд▓реЗрддрд╛ рд╣реИ, рдЬреЛ рдЕрдкрдиреЗ onNext(T) рдкрджреНрдзрддрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЯрд╛рдЗрдк T рдХреЗ рдХрд┐рд╕реА рднреА рдирдП рдореВрд▓реНрдпреЛрдВ рдХреА рд╕реВрдЪрдирд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ onError(Throwable) рддрд░реАрдХрд╛ onError(Throwable) ред рдЬрдм рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдкреВрд░рд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдмрд░ рдХрд╛ onComplete рд╡рд┐рдзрд┐ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг 4. рдЬреЗрдЯ рд╕реНрдЯреНрд░реАрдо: Subscriber<T> рдЗрдВрдЯрд░рдлрд╝реЗрд╕ред

 package org.reactivestreams; public interface Subscriber<T> { public void onSubscribe(Subscription s); public void onNext(T t); public void onError(Throwable t); public void onComplete(); } 

рдЬрдм Subscriber рдкрд╣рд▓реА рдмрд╛рд░ Publisher рдЬреБрдбрд╝рддрд╛ рд╣реИ, рддреЛ рдЙрд╕реЗ Subscriber#onSubscribe рдореЗрдВ Subscription рдорд┐рд▓рддрд╛ рд╣реИред рд╕рдмреНрд╕рдХреНрд░рд┐рдкреНрд╢рди Subscription рд╢рд╛рдпрдж рдкреВрд░реЗ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ; рдпрд╣ рд╡рд╣ рд╣реИ рдЬреЛ рд░рд┐рдЯрд░реНрди рдлреНрд▓реЛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдПрдХ рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдмрд░ рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдмрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдбреЗрдЯрд╛ рдХрд╛ Subscription#request рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Subscription#request рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП Subscription#cancel рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг 5. рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдзрд╛рд░рд╛рдПрдБ: Subscription<T> рдЗрдВрдЯрд░рдлрд╝реЗрд╕ ред

 package org.reactivestreams; public interface Subscription { public void request(long n); public void cancel(); } 

рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рд╕реНрдЯреНрд░реАрдо рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдПрдХ рдФрд░ рдЙрдкрдпреЛрдЧреА, рдпрджреНрдпрдкрд┐ рд╕реНрдкрд╖реНрдЯ, рдкреНрд░рдХрд╛рд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ: Processor<A,B> рдХреЗрд╡рд▓ рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИ рдЬреЛ Subscriber<A> рдФрд░ Publisher<B> рджреЛрдиреЛрдВ рдХреЛ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг 6. рдЬреЗрдЯ рд╕реНрдЯреНрд░реАрдо: Processor<T> рдЗрдВрдЯрд░рдлрд╝реЗрд╕ ред

 package org.reactivestreams; public interface Processor<T, R> extends Subscriber&ltT>, Publisher<R> { } 

рдПрдХ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдПрдХ рдиреБрд╕реНрдЦреЗ рдХреЗ рд░реВрдк рдореЗрдВ рддреИрдирд╛рдд рдирд╣реАрдВ рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЗрд╕рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдЗрдВрдЯрд░рдСрдкрд░реЗрдмрд┐рд▓рд┐рдЯреА рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рд╣реИред рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдкреНрд░рд╡рд╛рд╣ рд╕реЗ рдЬреБрдбрд╝реЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рд╕реНрдкрд╖реНрдЯ рд▓рд╛рдн рдпрд╣ рд╣реИ рдХрд┐ рдлрд┐рд░ рднреА рдЙрдиреНрд╣реЗрдВ рдЬрд╛рд╡рд╛ 9 рд░рд┐рд▓реАрдЬрд╝ рдореЗрдВ рдПрдХ рдЬрдЧрд╣ рдорд┐рд▓реА, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╢рдмреНрджрд╛рд░реНрде рд╡реЗ "рдПрдХ рд╕реЗ рдПрдХ" java.util.concurrent.Flow рд╡рд░реНрдЧ рд╕реЗ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: java.util.concurrent.Flow.Publisher

рдорд┐рд▓рд┐рдП рд░рд┐рдПрдХреНрдЯрд░ рд╕реЗ

рдЕрдХреЗрд▓реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдзрд╛рд░рд╛рдУрдВ рдХреЗ рдкреНрд░рдХрд╛рд░ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИрдВ; рдЙрдЪреНрдЪ рдХреНрд░рдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдФрд░ рдкрд░рд┐рд╡рд░реНрддрди рдЬреИрд╕реЗ рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЬреИрд╕реЗ, рд░рд┐рдПрдХреНрдЯрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ; рдпрд╣ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдзрд╛рд░рд╛рдУрдВ рдХреЗ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдкрд░ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рджреЛ Publisher<T> рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, Flux<T> рдПрдХ Publisher рд╣реИ рдЬреЛ рд╢реВрдиреНрдп рдпрд╛ рдЕрдзрд┐рдХ рдореВрд▓реНрдпреЛрдВ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рддрд╛ рд╣реИред рджреВрд╕рд░рд╛, Mono<T> , Publisher<T> , рдЬреЛ рд╢реВрдиреНрдп рдпрд╛ рдПрдХ рдореВрд▓реНрдп рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рддрд╛ рд╣реИред рджреЛрдиреЛрдВ рд╣реА рдореВрд▓реНрдпреЛрдВ рдХреЛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рддрджрдиреБрд╕рд╛рд░ рдЙрдиреНрд╣реЗрдВ рд╕рдВрднрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЙрдирдХреА рдХреНрд╖рдорддрд╛рдПрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдзрд╛рд░рд╛рдУрдВ рдХреЗ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рд╕реЗ рдмрд╣реБрдд рд╡реНрдпрд╛рдкрдХ рд╣реИрдВред рджреЛрдиреЛрдВ рд╣реА рдРрд╕реЗ рдСрдкрд░реЗрдЯрд░ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рдореВрд▓реНрдп рдзрд╛рд░рд╛рдУрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред рд░рд┐рдПрдХреНрдЯрд░ рдкреНрд░рдХрд╛рд░ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд░рдЪрдирд╛ рдХрд░рддреЗ рд╣реИрдВ - рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рджреВрд╕рд░реЗ рдХреЗ рд▓рд┐рдП рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЛ рдЕрдиреНрдп рдбреЗрдЯрд╛ рдзрд╛рд░рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рд╡реЗ Publisher<T> рдЙрджрд╛рд╣рд░рдгреЛрдВ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВред

Mono<T> рдФрд░ Flux<T> рджреЛрдиреЛрдВ Publisher<T> рд▓рд╛рдЧреВ рдХрд░реЗрдВ Publisher<T> ; рд╣рдо рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреЗ рддрд░реАрдХреЗ Publisher<T> рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди Flux<T> рдпрд╛ Mono<T> рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ; рдЗрд╕рд╕реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓реЗрдЧреА рдХрд┐ рдЙрд╕реЗ рдХрд┐рд╕ рддрд░рд╣ рдХрд╛ рдбреЗрдЯрд╛ рдорд┐рд▓рддрд╛ рд╣реИред

рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЖрдкрдХреЛ Publisher<T> рджрд┐рдпрд╛ рдЧрдпрд╛ рдФрд░ рдЗрд╕ Publisher<T> рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЧрдпрд╛ред рдХреНрдпрд╛ рддрдм рдореБрдЭреЗ рдПрдХ рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд▓рд┐рдП рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде рдПрдХ рдкреГрд╖реНрда рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдЖрдк CompletableFuture<T> рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдПрдХ рд╕реВрдЪреА рдпрд╛ рдЧреНрд░рд┐рдб рдХреЗ рд╕рд╛рде рдПрдХ рдЕрд╡рд▓реЛрдХрди рдкреГрд╖реНрда рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВ рдЬрд╣рд╛рдВ рд╕рднреА рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдВ рдкреГрд╖реНрда рджреНрд╡рд╛рд░рд╛ рдкреГрд╖реНрда рдкреНрд░рджрд░реНрд╢рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИрдВ? рдХрд╣рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред

рдмрджрд▓реЗ рдореЗрдВ, Flux<T> рдФрд░ Mono<T> рдмрд╣реБрдд рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИрдВред рдЖрдкрдХреЛ рдкрддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдЖрдкрдХреЛ Flux<T> рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдПрдХ рд╕рдореАрдХреНрд╖рд╛ рдкреГрд╖реНрда рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА Flux<T> , рдФрд░ Mono<T> рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╕рдордп рдПрдХ рд╡рд┐рд╡рд░рдг (рдпрд╛ рдПрдХ рднреА рдирд╣реАрдВ) рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд╕рд╛рде рдПрдХ рдкреГрд╖реНрдаред

рд░рд┐рдПрдХреНрдЯрд░ рдПрдХ рдУрдкрди рд╕реЛрд░реНрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╣реИ рдЬрд┐рд╕реЗ Pivotal рджреНрд╡рд╛рд░рд╛ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ; рдЕрдм рд╡рд╣ рдмрд╣реБрдд рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реЛ рдЧрдпрд╛ рд╣реИред рдлреЗрд╕рдмреБрдХ рджреВрд░рд╕реНрде рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдЬреЗрдЯ рдЗрдВрдЬрди рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдФрд░ RxJava рдирд┐рд░реНрдорд╛рддрд╛ рдмреЗрди рдХреНрд░рд┐рд╕реНрдЯреЗрдВрд╕рди рдХреЗ рдиреЗрддреГрддреНрд╡ рдореЗрдВ рд░реЛрд╕рдХреЗрдЯ рдореЗрдВ рднреА рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред Salesforce рдЕрдкрдиреЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ gRPC рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рд░рд┐рдПрдХреНрдЯрд░ рд░рд┐рдПрдХреНрдЯрд┐рд╡ рд╕реНрдЯреНрд░реАрдореНрд╕ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЕрдиреНрдп рддрдХрдиреАрдХреЛрдВ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЗрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдиреЗрдЯрдлреНрд▓рд┐рдХреНрд╕ рд╕реЗ RxJava 2 рдХреЗ рд╕рд╛рде, рд▓рд╛рдЗрдЯрдмреЗрдВрдб рд╕реЗ рдЕрдХреНрдХрд╛ рд╕реНрдЯреНрд░реАрдореНрд╕ рдФрд░ Esese рдлрд╛рдЙрдВрдбреЗрд╢рди рд╕реЗ рд╡рд░реНрдЯреИрдХреНрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рдеред RxJava 2 рдХреЗ рдирд┐рджреЗрд╢рдХ рдбреЗрд╡рд┐рдб рдХреЗрдпрд░реНрдиреЙрдХ рдиреЗ рднреА рд░рд┐рдПрдХреНрдЯрд░ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Pivotal рдХреЗ рд╕рд╛рде рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рд╕рд╣рдпреЛрдЧ рдХрд┐рдпрд╛, рдЬрд┐рд╕рд╕реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдФрд░ рднреА рдмреЗрд╣рддрд░ рд╣реЛ рдЧрдИред рдкреНрд▓рд╕, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдпрд╣ рд╕реНрдкреНрд░рд┐рдВрдЧ рдлреНрд░реЗрдорд╡рд░реНрдХ 4.0 рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рд╕реНрдкреНрд░рд┐рдВрдЧ рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ рдПрдХ рдпрд╛ рджреВрд╕рд░реЗ рд░реВрдк рдореЗрдВ рдореМрдЬреВрдж рд╣реИред

рд╕реНрдкреНрд░рд┐рдВрдЧ рд╡реЗрдмрдлреНрд▓рдХреНрд╕ рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ

рдЗрд╕рдХреА рд╕рднреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЗ рд▓рд┐рдП, рд░рд┐рдПрдХреНрдЯрд░ рд╕рд┐рд░реНрдл рдЖрдзрд╛рд░ рд╣реИред рд╣рдорд╛рд░реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдбреЗрдЯрд╛ рд╕реНрд░реЛрддреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдФрд░ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╡рд╕рдВрдд рдпрд╣ рд╕рдм рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рд░рд┐рдПрдХреНрдЯрд░ рд╣рдореЗрдВ рд▓рд╛рдкрддрд╛ рд░реВрдкрдХ рджреЗрддрд╛ рд╣реИ, рддреЛ рд╡рд╕рдВрдд рд╣рдо рд╕рднреА рдХреЛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рднрд╛рд╖рд╛ рдмреЛрд▓рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред

рд╕реНрдкреНрд░рд┐рдВрдЧ рдлреНрд░реЗрдорд╡рд░реНрдХ 5.0 рд╕рд┐рддрдВрдмрд░ 2017 рдореЗрдВ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдпрд╣ рд░рд┐рдПрдХреНрдЯрд░ рдФрд░ рд░рд┐рдПрдХреНрдЯрд┐рд╡ рд╕реНрдЯреНрд░реАрдо рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдкрд░ рдмрдирд╛рддрд╛ рд╣реИред рдЗрд╕рдореЗрдВ рдПрдХ рдирдпрд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рд░рдирдЯрд╛рдЗрдо рдФрд░ рдШрдЯрдХ рдореЙрдбрд▓ рд╣реИ рдЬрд┐рд╕реЗ рд╕реНрдкреНрд░рд┐рдВрдЧ рд╡реЗрдмрдлреНрд▓рдХреНрд╕ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╕реНрдкреНрд░рд┐рдВрдЧ рд╡реЗрдмрдлреНрд▓рдХреНрд╕ рд╕рд░реНрд╡рд▓реЗрдЯ рдПрдкреАрдЖрдИ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдПрдбреЗрдкреНрдЯрд░ рдХреЗ рд╕рд╛рде рдЖрддрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдиреЗ рдкрд░ рдЗрд╕реЗ рд╕рд░реНрд╡рд▓реЗрдЯ рдЗрдВрдЬрди рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИред рдпрд╣ рд╕реНрдкреНрд░рд┐рдВрдЧ рд╡реЗрдмрдлреНрд▓рдХреНрд╕ рдирд╛рдордХ рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирдпрд╛ рдиреЗрдЯреА-рдЖрдзрд╛рд░рд┐рдд рд░рдирдЯрд╛рдЗрдо рднреА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рд╕реНрдкреНрд░рд┐рдВрдЧ рдлреНрд░реЗрдорд╡рд░реНрдХ 5, рдЬрд╛рд╡рд╛ 8 рдФрд░ рдЬрд╛рд╡рд╛ рдИрдИ 7 рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдФрд░ рдмрд╛рдж рдореЗрдВ, рдЕрдм рд╕реНрдкреНрд░рд┐рдВрдЧ рдбреЗрдЯрд╛ рдХрд╛рдИ, рд╕реНрдкреНрд░рд┐рдВрдЧ рд╕рд┐рдХреНрдпреЛрд░рд┐рдЯреА 5, рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ 2, рдФрд░ рд╕реНрдкреНрд░рд┐рдВрдЧ рдХреНрд▓рд╛рдЙрдб рдлрд╝рд┐рдВрдЪрд▓реА рд╕рд╣рд┐рдд рд╕реНрдкреНрд░рд┐рдВрдЧ рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдХреЗ рд▓рд┐рдП рдиреАрдВрд╡ рдХрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

Source: https://habr.com/ru/post/hi435972/


All Articles