This is an automated email from the ASF dual-hosted git repository. btellier pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git
commit 524705ddfd1bd975eeffe4c17ca6dc44c19b3471 Author: Matthieu Baechler <[email protected]> AuthorDate: Wed Apr 15 23:10:06 2020 +0200 [Refactoring] remove LimitingFileInputStream The only feature that is not handled by ByteStreams.limit is the possibility to use the underlying file channel but it's never used --- .../mailbox/maildir/mail/model/MaildirMessage.java | 6 +- .../store/streaming/LimitingFileInputStream.java | 263 --------------------- 2 files changed, 4 insertions(+), 265 deletions(-) diff --git a/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/model/MaildirMessage.java b/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/model/MaildirMessage.java index 5826657..c92a2d9 100644 --- a/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/model/MaildirMessage.java +++ b/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/model/MaildirMessage.java @@ -38,7 +38,6 @@ import org.apache.james.mailbox.store.mail.model.Property; import org.apache.james.mailbox.store.mail.model.impl.MessageParser; import org.apache.james.mailbox.store.mail.model.impl.PropertyBuilder; import org.apache.james.mailbox.store.streaming.CountingInputStream; -import org.apache.james.mailbox.store.streaming.LimitingFileInputStream; import org.apache.james.mime4j.MimeException; import org.apache.james.mime4j.message.DefaultBodyDescriptorBuilder; import org.apache.james.mime4j.message.MaximalBodyDescriptor; @@ -47,6 +46,8 @@ import org.apache.james.mime4j.stream.MimeConfig; import org.apache.james.mime4j.stream.MimeTokenStream; import org.apache.james.mime4j.stream.RecursionMode; +import com.google.common.io.ByteStreams; + public class MaildirMessage implements Message { private final MaildirMessageName messageName; @@ -263,7 +264,8 @@ public class MaildirMessage implements Message { if (limit < 0) { limit = 0; } - return new LimitingFileInputStream(messageName.getFile(), limit); + + return ByteStreams.limit(new FileInputStream(messageName.getFile()), limit); } @Override diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/streaming/LimitingFileInputStream.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/streaming/LimitingFileInputStream.java deleted file mode 100644 index 1c7b738..0000000 --- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/streaming/LimitingFileInputStream.java +++ /dev/null @@ -1,263 +0,0 @@ -/**************************************************************** - * Licensed to the Apache Software Foundation (ASF) under one * - * or more contributor license agreements. See the NOTICE file * - * distributed with this work for additional information * - * regarding copyright ownership. The ASF licenses this file * - * to you under the Apache License, Version 2.0 (the * - * "License"); you may not use this file except in compliance * - * with the License. You may obtain a copy of the License at * - * * - * http://www.apache.org/licenses/LICENSE-2.0 * - * * - * Unless required by applicable law or agreed to in writing, * - * software distributed under the License is distributed on an * - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * - * KIND, either express or implied. See the License for the * - * specific language governing permissions and limitations * - * under the License. * - ****************************************************************/ -package org.apache.james.mailbox.store.streaming; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.nio.ByteBuffer; -import java.nio.MappedByteBuffer; -import java.nio.channels.FileChannel; -import java.nio.channels.FileLock; -import java.nio.channels.ReadableByteChannel; -import java.nio.channels.WritableByteChannel; - -public class LimitingFileInputStream extends FileInputStream { - private long pos = 0; - private final long limit; - - public LimitingFileInputStream(File file, long limit) throws FileNotFoundException { - super(file); - this.limit = limit; - } - - @Override - public int read() throws IOException { - if (pos >= limit) { - return -1; - } - pos++; - return super.read(); - } - - @Override - public int read(byte[] b) throws IOException { - return read(b, 0, b.length); - } - - @Override - public int read(byte[] b, int off, int len) throws IOException { - if (pos >= limit) { - return -1; - } - int readLimit; - if (pos + len >= limit) { - readLimit = (int) limit - (int) pos; - } else { - readLimit = len; - } - - int i = super.read(b, off, readLimit); - pos += i; - return i; - } - - @Override - public long skip(long n) throws IOException { - long currentPos = pos; - long i = super.skip(n); - if (currentPos == pos) { - pos += i; - } - return i; - } - - @Override - public int available() throws IOException { - int i = super.available(); - if (i == -1) { - return -1; - } else { - if (i >= limit) { - return (int) limit - (int) pos; - } else { - return i; - } - } - } - - - /** - * Return the limit - * - * @return limit - */ - public long getLimit() { - return limit; - } - - /** - * Return a READ-ONLY {@link FileChannel} which is limited also in the size - * - * @return channel - */ - @Override - public FileChannel getChannel() { - return new LimitingFileChannel(super.getChannel()); - } - - - /** - * A {@link FileChannel} implementation which wrapps another {@link FileChannel} and limit the access to it - * - * - */ - private final class LimitingFileChannel extends FileChannel { - - private final FileChannel channel; - - public LimitingFileChannel(FileChannel channel) { - this.channel = channel; - } - - @Override - public int read(ByteBuffer dst) throws IOException { - int bufLimit = dst.limit(); - int left = (int) bytesLeft(); - int r; - if (bufLimit > left) { - dst.limit(left); - r = channel.read(dst); - dst.limit(bufLimit); - } else { - r = channel.read(dst); - } - return r; - - } - - @Override - public long read(ByteBuffer[] dsts, int offset, int length) throws IOException { - long r = 0; - for (int a = offset; a < length; a++) { - r += read(dsts[a]); - } - - return r; - } - - @Override - public int write(ByteBuffer src) throws IOException { - throw new IOException("Read-Only FileChannel"); - } - - @Override - public long write(ByteBuffer[] srcs, int offset, int length) throws IOException { - throw new IOException("Read-Only FileChannel"); - } - - @Override - public long position() throws IOException { - return channel.position(); - } - - @Override - public FileChannel position(long newPosition) throws IOException { - if (newPosition <= limit) { - channel.position(newPosition); - } - return LimitingFileChannel.this; - } - - @Override - public long size() throws IOException { - return limit; - } - - @Override - public FileChannel truncate(long size) throws IOException { - throw new IOException("Read-Only FileChannel"); - } - - @Override - public void force(boolean metaData) throws IOException { - channel.force(metaData); - } - - @Override - public long transferTo(long position, long count, WritableByteChannel target) throws IOException { - if (position > limit) { - return 0; - } else { - long left = bytesLeft(); - - if (count > left) { - count = left; - } - return channel.transferTo(position, count, target); - } - } - - @Override - public long transferFrom(ReadableByteChannel src, long position, long count) throws IOException { - throw new IOException("Read-Only FileChannel"); - } - - @Override - public int read(ByteBuffer dst, long position) throws IOException { - if (position > size()) { - return 0; - } - int bufLimit = dst.limit(); - int left = (int) bytesLeft(); - int r; - if (bufLimit > left) { - dst.limit(left); - r = channel.read(dst, position); - dst.limit(bufLimit); - } else { - r = channel.read(dst, position); - } - return r; - } - - @Override - public int write(ByteBuffer src, long position) throws IOException { - throw new IOException("Read-Only FileChannel"); - - } - - @Override - public MappedByteBuffer map(MapMode mode, long position, long size) throws IOException { - return channel.map(mode, position, size); - } - - @Override - public FileLock lock(long position, long size, boolean shared) throws IOException { - return channel.lock(position, size, shared); - } - - @Override - public FileLock tryLock(long position, long size, boolean shared) throws IOException { - return channel.tryLock(position, size, shared); - } - - @Override - protected void implCloseChannel() throws IOException { - channel.close(); - } - - private long bytesLeft() throws IOException { - return limit - position(); - } - } - - -} --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
