рдЬрд╛рд╡рд╛ рдореЗрдВ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдареАрдХ рд╕реЗ рдореБрдХреНрдд рдХрд░рдирд╛

рдЬрд╛рд╡рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рдмреАрдЪ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдореБрдХреНрдд рдХрд░рдирд╛ рд╕рдмрд╕реЗ рдЖрдо рддреМрд░ рдкрд░ рдХреА рдЧрдИ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╕рдВрд╕рд╛рдзрди рд╕реЗ рдореЗрд░рд╛ рдорддрд▓рдм рд╕рдм рдХреБрдЫ рд╣реЛрдЧрд╛ рдЬреЛ java.io.Closeable рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рддреЛ, рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рд╕рд╣реА рд╣реИред

рд╣рдо OutputStream рдХреЗ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред рдХрд╛рд░реНрдп: рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ OutputStream рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ, рдЗрд╕рдХреЗ рд╕рд╛рде рдХреБрдЫ рдЙрдкрдпреЛрдЧреА рдХрд╛рд░реНрдп рдХрд░реЗрдВ, OutputStream рдмрдВрдж рдХрд░реЗрдВред

рдЧрд▓рдд рдирд┐рд░реНрдгрдп рдирдВрдмрд░ 1


 OutputStream stream = openOutputStream(); // -   stream stream.close(); 


рдпрд╣ рд╕рдорд╛рдзрд╛рди рдЦрддрд░рдирд╛рдХ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрджрд┐ рдХреЛрдИ рдЕрдкрд╡рд╛рдж рдХреЛрдб рдореЗрдВ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ stream.close () рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ред рдПрдХ рд╕рдВрд╕рд╛рдзрди рд░рд┐рд╕рд╛рд╡ рд╣реЛрдЧрд╛ (рдХрдиреЗрдХреНрд╢рди рдмрдВрдж рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдлрд╝рд╛рдЗрд▓ рд╡рд┐рд╡рд░рдгрдХ рдХреЛ рдореБрдХреНрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЖрджрд┐)

рдЧрд▓рдд рдирд┐рд░реНрдгрдп рдирдВред реи


рдЪрд▓реЛ рдкрд┐рдЫрд▓реЗ рдХреЛрдб рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред рд╣рдо try-finally :

 OutputStream stream = openOutputStream(); try { // -   stream } finally { stream.close(); } 


рдЕрдм close() рд╣рдореЗрд╢рд╛ рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ (рдХреНрдпреЛрдВрдХрд┐ finally ): рд╕рдВрд╕рд╛рдзрди рд╡реИрд╕реЗ рднреА рдореБрдХреНрдд рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рд╕рдм рдХреБрдЫ рд╕рд╣реА рд╣реЛрдиреЗ рд▓рдЧрддрд╛ рд╣реИред рдХреНрдпрд╛ рдРрд╕рд╛ рд╣реИ?

рдирд╣реАрдВред

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

рдЧрд▓рдд рдирд┐рд░реНрдгрдп рд╕рдВрдЦреНрдпрд╛ 3


рдЖрдЗрдП рд╕реНрдерд┐рддрд┐ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдпрджрд┐ stream.close() "рдореБрдЦреНрдп" рдЕрдкрд╡рд╛рдж рдХреЛ рдкрдХрдбрд╝ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдЪрд▓реЛ close() рд╕реЗ рдЕрдкрд╡рд╛рдж рдХреЛ "рдирд┐рдЧрд▓" рджреЗрдВ:

 OutputStream stream = openOutputStream(); try { // -   stream } finally { try { stream.close(); } catch (Throwable unused) { //  } } 


рдЕрдм рд╕рдм рдареАрдХ рд▓рдЧрдиреЗ рд▓рдЧрд╛ рд╣реИред рд╣рдо рдЪрд╛рдп рдкреАрдиреЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдХреИрд╕реЗред рдпрд╣ рд╕рдорд╛рдзрд╛рди рдкрд┐рдЫрд▓реЗ рд╡рд╛рд▓реЗ рд╕реЗ рднреА рдмрджрддрд░ рд╣реИред рдХреНрдпреЛрдВ?

рдХреНрдпреЛрдВрдХрд┐ рд╣рдордиреЗ рдЕрднреА close() рд╕реЗ рдЕрдкрд╡рд╛рдж рдХреЛ рдкрдХрдбрд╝рд╛ рдФрд░ рдирд┐рдЧрд▓ рд▓рд┐рдпрд╛ рдерд╛ред рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ outputStream рдПрдХ FileOutputStream рд╣реИ, рдЬреЛ FileOutputStream рд▓рд┐рдкрдЯрд╛ рд╣реБрдЖ рд╣реИред рдЪреВрдБрдХрд┐ BufferedOutputStream рдореЗрдВ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╕реНрдЯреНрд░реАрдо рдкрд░ flush() рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рд╡рд╣ рдЗрд╕реЗ close() рдХреЙрд▓ рдХреЗ рджреМрд░рд╛рди рдХреЙрд▓ рдХрд░реЗрдЧрд╛ред рдЕрдм рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдЬрд┐рд╕ рдлрд╛рдЗрд▓ рдХреЛ рд╣рдо рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВ рд╡рд╣ рд▓реЙрдХ рд╣реИред рдлрд┐рд░ close() рд╡рд┐рдзрд┐ рдПрдХ IOException рдХреЛ рдлреЗрдВрдХ IOException , рдЬрд┐рд╕реЗ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЦрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбреЗрдЯрд╛ рдХрд╛ рдПрдХ рднреА рдмрд╛рдЗрдЯ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд╣реАрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рд╣рдордиреЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╕реАрдЦрд╛ред рд╕реВрдЪрдирд╛ рдЧреБрдо рд╣реЛ рдЧрдИред

рдпрджрд┐ рд╣рдо рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХреА рддреБрд▓рдирд╛ рдкрд┐рдЫрд▓реЗ рд╡рд╛рд▓реЗ рд╕реЗ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдХрдо рд╕реЗ рдХрдо рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдПрдВрдЧреЗ рдХрд┐ рдХреБрдЫ рдмреБрд░рд╛ рд╣реБрдЖ рд╣реИред рдпрд╣рд╛рдВ, рд╕рднреА рддреНрд░реБрдЯрд┐ рдЬрд╛рдирдХрд╛рд░реА рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рддреА рд╣реИред

рдиреЛрдЯ: рдпрджрд┐ OutputStream рдмрдЬрд╛рдп InputStream рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕ рдХреЛрдб рдХреЛ рдЬреАрд╡рди рдХрд╛ рдЕрдзрд┐рдХрд╛рд░ рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдПрдХ рдЕрдкрд╡рд╛рдж InputStream.close() рдореЗрдВ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ (рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ) рдХреЛрдИ рднреА рдмреБрд░рд╛ рдкрд░рд┐рдгрд╛рдо рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕ рдзрд╛рд░рд╛ рд╕реЗ рдЬреЛ рдХреБрдЫ рднреА рдЪрд╛рд╣рддреЗ рдереЗ, рдЙрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ InputStream рдФрд░ OutputStream рдХрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рд╢рдмреНрджрд╛рд░реНрде рд╣реИред

рдЗрдореНрдкреЗрдХреНрдЯ рд╕реЙрд▓реНрдпреВрд╢рди


рддреЛ, рд╕рдВрд╕рд╛рдзрди рд╕рдВрд╕рд╛рдзрди рдХреЛрдб рд╕рд╣реА рдХреИрд╕реЗ рджрд┐рдЦрддрд╛ рд╣реИ?

рд╣рдореЗрдВ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рдореБрдЦреНрдп рдХреЛрдб рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрддрд╛ рд╣реИ, рддреЛ рдЗрд╕ рдЕрдкрд╡рд╛рдж рдХреЛ рдкреВрд░реНрд╡рд╡рд░реНрддреА рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд▓реЗрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕реЗ close() рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рдлреЗрдВрдХрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

 OutputStream stream = openOutputStream(); Throwable mainThrowable = null; try { // -   stream } catch (Throwable t) { //   mainThrowable = t; //      throw t; } finally { if (mainThrowable == null) { //    .   close() stream.close(); } else { try { stream.close(); } catch (Throwable unused) { // ,      //     ( ) } } } 


рдЗрд╕ рдирд┐рд░реНрдгрдп рдХреЗ рдиреБрдХрд╕рд╛рди рд╕реНрдкрд╖реНрдЯ рд╣реИрдВ: рдмреЛрдЭрд┐рд▓ рдФрд░ рдХрдард┐рдиред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрджрд┐ рдореБрдЦреНрдп рдХреЛрдб рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХрддрд╛ рд╣реИ, рддреЛ close() рд╕реЗ рдЕрдкрд╡рд╛рдж close() рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдЦреЛ рдЬрд╛рддреА рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ openOutputStream() null рд╡рд╛рдкрд╕ рдЖ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдПрдХ NullPointerException рдХреЛ NullPointerException рдЬрд╛рдПрдЧрд╛ (рдпрджрд┐ рдПрдХ рдФрд░ рдЬреЛрдбрд╝рдХрд░ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдП, рдЬреЛ рдФрд░ рднреА рдЕрдзрд┐рдХ рдмреЛрдЭрд┐рд▓ рдХреЛрдб рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИ)ред рдЕрдВрдд рдореЗрдВ, рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреЛ рд╕рдВрд╕рд╛рдзрди рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, InputStream рдФрд░ OutputStream ) рдпрд╛ рдЕрдзрд┐рдХ, рддреЛ рдХреЛрдб рдмрд╕ рдЕрд╕рд╣рдиреАрдп рдЬрдЯрд┐рд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

рд╕рд╣реА рд╕рдорд╛рдзрд╛рди (рдЬрд╛рд╡рд╛ 7)


рдЬрд╛рд╡рд╛ 7 рдиреЗ try-with-resources рдирд┐рд░реНрдорд╛рдг рдХрд╛ try-with-resources рд╢реБрд░реВ рдХрд┐рдпрд╛ред рд╣рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:

 try (OutputStream stream = openOutputStream()) { // -   stream } 


рдФрд░ рд╡рд╣ рдпрд╣ рд╣реИред

рдпрджрд┐ рдПрдХ рдЕрдкрд╡рд╛рдж рдореБрдЦреНрдп рдХреЛрдб рдореЗрдВ рдФрд░ close() рд╡рд┐рдзрд┐ рдореЗрдВ рдлреЗрдВрдХрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдкрд╣рд▓рд╛ рдЕрдкрд╡рд╛рдж рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╣реЛрдЧрд╛, рдФрд░ рджреВрд╕рд░рд╛ рдЕрдкрд╡рд╛рдж рджрдмрд╛ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╕рд╣реЗрдЬ рд▓реА Throwable.addSuppressed(Throwable exception) рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЬрд┐рд╕реЗ рдЬрд╛рд╡рд╛ рд╕рдВрдХрд▓рдХ рджреНрд╡рд╛рд░рд╛ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ):

 Exception in thread "main" java.lang.RuntimeException: Main exception at A$1.write(A.java:16) at A.doSomething(A.java:27) at A.main(A.java:8) Suppressed: java.lang.RuntimeException: Exception on close() at A$1.close(A.java:21) at A.main(A.java:9) 


рд╕рд╣реА рд╕рдорд╛рдзрд╛рди (Google рдЕрдорд░реВрдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЬрд╛рд╡рд╛ 6)


рдЬрд╛рд╡рд╛ 6 рдореЗрдВ, рдЕрдХреЗрд▓реЗ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдЙрдкрдХрд░рдг рдЕрдкрд░рд┐рд╣рд╛рд░реНрдп рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╣рдорд╛рд░реА рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд▓рд┐рдП рдЕрджреНрднреБрдд Google рдЕрдорд░реВрдж рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЖрддрд╛ рд╣реИред рд╡рд░реНрдЧ com.google.common.io.Closer (рдЧрд░реАрдмреЛрдВ рдХреЗ рд▓рд┐рдП try-with-resources ) рдЕрдорд░реВрдж 14.0 рдореЗрдВ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ рд╣реИ, рдЬрд┐рд╕рдХреА рдорджрдж рд╕реЗ рдЙрдкрд░реЛрдХреНрдд рдЕрдкреВрд░реНрдг рд╕рдорд╛рдзрд╛рди рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

 Closer closer = Closer.create(); try { OutputStream stream = closer.register(openOutputStream()); // -   stream } catch (Throwable e) { //     (  Error') throw closer.rethrow(e); } finally { closer.close(); } 


рд╕рдорд╛рдзрд╛рди рдЬрд╛рд╡рд╛ 7 рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрд╛рдлреА рд▓рдВрдмрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдкреВрд░реНрдг рд╕рдорд╛рдзрд╛рди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдХрдо рд╣реИред рдЖрдЙрдЯрдкреБрдЯ рд▓рдЧрднрдЧ рдЬрд╛рд╡рд╛ 7 рдЬреИрд╕рд╛ рд╣реА рд╣реЛрдЧрд╛ред

Closer рдЗрд╕рдореЗрдВ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рдПрдХ рдордирдорд╛рдиреА рд░рд╛рд╢рд┐ ( register(...) рд╡рд┐рдзрд┐) рдХрд╛ рднреА рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, Closer рдПрдХ рд╡рд░реНрдЧ рд╣реИ рдЬреЛ @Beta рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдпрд╣ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рднрд╡рд┐рд╖реНрдп рдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ (рд╡рд┐рд▓реЛрдкрди рддрдХ) рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрджрд▓рд╛рд╡реЛрдВ рд╕реЗ рдЧреБрдЬрд░ рд╕рдХрддрд╛ рд╣реИред

рдирд┐рд╖реНрдХрд░реНрд╖


рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЬрд╛рд░реА рдХрд░рдирд╛ рдЙрддрдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИ рдЬрд┐рддрдирд╛ рд▓рдЧрддрд╛ рд╣реИ (рдХреЗрд╡рд▓ рдЬрд╛рд╡рд╛ 7 рдореЗрдВ)ред рдЗрд╕ рдкрд░ рд╣рдореЗрд╢рд╛ рдзреНрдпрд╛рди рджреЗрдВред InputStream рдФрд░ OutputStream ( Reader рдФрд░ Writer ) рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ (рдХрдо рд╕реЗ рдХрдо рдЬрд╛рд╡рд╛ 6 рдореЗрдВ)!

рдкрд░рд┐рд╡рд░реНрдзрди / рд╕реБрдзрд╛рд░ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ!

рдЕрдЧрд▓реА рдмрд╛рд░ рдореИрдВ рдпрд╣ рдмрддрд╛рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ NullPointerException рдХреИрд╕реЗ рдирд┐рдкрдЯреЗрдВред

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


All Articles