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);
}
}