Also, since there aren't any consistency effects in place, it is not deterministic which changes made by the writer would be seen by the reader/copier.

On 2025-10-27 18:35, Pavel Rappo wrote:
In the absence of "frozen arrays" -- which I'm not even sure could be
useful here -- we cannot guarantee that a shared byte[] passed to
OutputStream.write is not meddled with from outside, no matter if
synchronization or defensive copy is used. To clarify the latter
point: the array may be changed while it's being copied, which is no
different from it being changed while it is being written from.

If someone is flipping bytes while OutputStream.write has not yet
returned, then I reckon it's a programming bug or an adversarial
attack, which was probably enabled by such bug. Not sure if there was
any other answer expected.

-Pavel

On Mon, Oct 27, 2025 at 5:02 PM Alan Bateman <[email protected]> wrote:


On 27/10/2025 11:47, Pavel Rappo wrote:

The specification of the read/write methods, their classes, and the
package is silent on multithreading. In which case you should always
assume that the methods are **not** thread-safe.

Right, although there are some APIs that do specify that input or output 
streams are safe for used by concurrent threads, e.g. the input/output streams 
returned by the Channels class that support interop between channels and 
input/output streams.

Another more subtle aspect to the topic is async close. With many input/output 
streams it doesn't make any sense to attempt to use them from concurrent 
threads but async close when there is a blocker read/writer is something that 
has to be supported in some cases.

In any access, I read Florian's mail as asking something else. I read the mail 
as concurrent access to the byte[], e.g. someone flipping bytes while someone 
is calling write.

-Alan

--
Cheers,
√


Viktor Klang
Software Architect, Java Platform Group
Oracle

Reply via email to