----- Original Message ----- > From: "Ron Pressler" <ron.press...@oracle.com> > To: "Remi Forax" <fo...@univ-mlv.fr> > Cc: "cay horstmann" <cay.horstm...@gmail.com>, "core-libs-dev" > <core-libs-dev@openjdk.org>, "David Alayachew" > <davidalayac...@gmail.com> > Sent: Monday, April 14, 2025 11:46:25 PM > Subject: Re: [External] : Re: My experience using Java to do CLI Scripting
>> On 14 Apr 2025, at 21:48, Remi Forax <fo...@univ-mlv.fr> wrote: >> >> >> Hi Ron, >> i think you need to close the inputReader >> >> public static String output(String... args) { >> ProcessBuilder processBuilder = new ProcessBuilder(args); >> try { >> Process process = processBuilder.start(); >> try (BufferedReader reader = process.inputReader()) { >> return reader.lines().collect(Collectors.joining("\n")); >> } >> } catch (IOException e) { >> throw new IOError(e); >> } >> } > > > When the process terminates, the InputStream underlying the pipe is closed > (after being drained and the unread bytes served by a ByteArrayInputStream), > which *I think* should be sufficient, but I could be wrong. I more worried about the iterator used by lines() throwing an exception (IO or charset related) or joining() throwing an OOME because in that case the reader may not be closed. > > — Ron regards, Rémi