@Override public void write(int b) throws IOException { if (mShouldCacheCurrentBlock) { try { if (mCurrentBlockOutStream == null || mCurrentBlockOutStream.remaining() == 0) { getNextBlock(); } mCurrentBlockOutStream.write(b); } catch (IOException e) { handleCacheWriteException(e); } } if (mUnderStorageType.isSyncPersist()) { mUnderStorageOutputStream.write(b); ClientContext.getClientMetrics().incBytesWrittenUfs(1); } mBytesWritten++; }
@Override public void write(byte[] b, int off, int len) throws IOException { Preconditions.checkArgument(b != null, PreconditionMessage.ERR_WRITE_BUFFER_NULL); Preconditions.checkArgument( off >= 0 && len >= 0 && len + off <= b.length, PreconditionMessage.ERR_BUFFER_STATE, b.length, off, len); if (mShouldCacheCurrentBlock) { try { int tLen = len; int tOff = off; while (tLen > 0) { if (mCurrentBlockOutStream == null || mCurrentBlockOutStream.remaining() == 0) { getNextBlock(); } long currentBlockLeftBytes = mCurrentBlockOutStream.remaining(); if (currentBlockLeftBytes >= tLen) { mCurrentBlockOutStream.write(b, tOff, tLen); tLen = 0; } else { mCurrentBlockOutStream.write(b, tOff, (int) currentBlockLeftBytes); tOff += currentBlockLeftBytes; tLen -= currentBlockLeftBytes; } } } catch (IOException e) { handleCacheWriteException(e); } } if (mUnderStorageType.isSyncPersist()) { mUnderStorageOutputStream.write(b, off, len); ClientContext.getClientMetrics().incBytesWrittenUfs(len); } mBytesWritten += len; }