gpt4 book ai didi

java - 有没有高性能文件解析的设计模式?

转载 作者:行者123 更新时间:2023-12-01 12:09:49 26 4
gpt4 key购买 nike

我最近开发了自己的文件解析类,名为 BufferedParseStream ,并用它来解码 PNG 图像。我一直在将它的性能与开源项目 PNGJ 进行比较,并且发现对于较小的图像尺寸,PNGJ 的速度最多可以是我自己的实现的两倍。我认为这与使用 BufferedInputStream 时的实现开销相关。 ,正如 PNGJ 推出自己的 equivalent相反。

是否有任何现有的设计模式可以指导高性能文件解析,例如int , float等等?

public class BufferedParseStream extends BufferedInputStream {

private final ByteBuffer mByteBuffer;

public BufferedParseStream(final InputStream pInputStream, final int pBufferSize) {
super(pInputStream, pBufferSize);
/* Initialize the ByteBuffer. */
this.mByteBuffer = DataUtils.delegateNative(new byte[8]);
}

private final void buffer(final int pNumBytes) throws IOException {
/* Read the bytes into the ByteStorage. */
this.read(this.getByteBuffer().array(), 0, pNumBytes);
/* Reset the ByteBuffer Location. */
this.getByteBuffer().position(0);
}

public final char parseChar() throws IOException {
/* Read a single byte. */
this.buffer(DataUtils.BYTES_PER_CHAR);
/* Return the corresponding character. */
return this.getByteBuffer().getChar();
}

public final int parseInt() throws IOException {
/* Read four bytes. */
this.buffer(DataUtils.BYTES_PER_INT);
/* Return the corresponding integer. */
return this.getByteBuffer().getInt();
}

public final long parseLong() throws IOException {
/* Read eight bytes. */
this.buffer(DataUtils.BYTES_PER_LONG);
/* Return the corresponding long. */
return this.getByteBuffer().getLong();
}

public final void setParseOrder(final ByteOrder pByteOrder) {
this.getByteBuffer().order(pByteOrder);
}

private final ByteBuffer getByteBuffer() {
return this.mByteBuffer;
}

}

最佳答案

Java nio 应该比使用输入流更快,你提供的类对我来说似乎很奇怪(可能只是我:)),因为它在 ByteBuffer 之上有一个额外的层,我认为这不是必需的。

您应该直接使用字节缓冲区,它有一个 getInt、getFloat 方法,您可以直接将其输入到所需的变量中。

我认为虽然你的性能问题可能出在 PNG 解码器代码中,正如其他人已经提到的那样。您应该将其发布以供进一步分析

关于java - 有没有高性能文件解析的设计模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27334021/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com