public synchronized void write()

in maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/Utf8RecodingDeferredFileOutputStream.java [65:117]


    public synchronized void write(String output, boolean newLine) throws IOException {
        if (closed) {
            return;
        }

        if (storage == null) {

            file = SureFireFileManager.createTempFile(channel, "deferred").toPath();
            storage = new RandomAccessFile(file.toFile(), "rw");
        }

        if (output == null) {
            output = "null";
        }

        if (cache == null) {
            cache = ByteBuffer.allocate(CACHE_SIZE);
        }

        isDirty = true;

        byte[] decodedString = output.getBytes(UTF_8);
        int newLineLength = newLine ? NL_BYTES.length : 0;
        if (cache.remaining() >= decodedString.length + newLineLength) {
            cache.put(decodedString);
            if (newLine) {
                cache.put(NL_BYTES);
            }
        } else {
            ((Buffer) cache).flip();
            int minLength = cache.remaining() + decodedString.length + NL_BYTES.length;
            byte[] buffer = getLargeCache(minLength);
            int bufferLength = 0;
            System.arraycopy(
                    cache.array(),
                    cache.arrayOffset() + ((Buffer) cache).position(),
                    buffer,
                    bufferLength,
                    cache.remaining());
            bufferLength += cache.remaining();
            ((Buffer) cache).clear();

            System.arraycopy(decodedString, 0, buffer, bufferLength, decodedString.length);
            bufferLength += decodedString.length;

            if (newLine) {
                System.arraycopy(NL_BYTES, 0, buffer, bufferLength, NL_BYTES.length);
                bufferLength += NL_BYTES.length;
            }

            storage.write(buffer, 0, bufferLength);
        }
    }