Initial commit
This commit is contained in:
34
sources/com/squareup/haha/perflib/io/HprofBuffer.java
Normal file
34
sources/com/squareup/haha/perflib/io/HprofBuffer.java
Normal file
@@ -0,0 +1,34 @@
|
||||
package com.squareup.haha.perflib.io;
|
||||
|
||||
import java.nio.ByteOrder;
|
||||
|
||||
/* loaded from: classes.dex */
|
||||
public interface HprofBuffer {
|
||||
public static final ByteOrder HPROF_BYTE_ORDER = ByteOrder.BIG_ENDIAN;
|
||||
|
||||
boolean hasRemaining();
|
||||
|
||||
long position();
|
||||
|
||||
void read(byte[] bArr);
|
||||
|
||||
byte readByte();
|
||||
|
||||
char readChar();
|
||||
|
||||
double readDouble();
|
||||
|
||||
float readFloat();
|
||||
|
||||
int readInt();
|
||||
|
||||
long readLong();
|
||||
|
||||
short readShort();
|
||||
|
||||
void readSubSequence(byte[] bArr, int i, int i2);
|
||||
|
||||
long remaining();
|
||||
|
||||
void setPosition(long j);
|
||||
}
|
171
sources/com/squareup/haha/perflib/io/MemoryMappedFileBuffer.java
Normal file
171
sources/com/squareup/haha/perflib/io/MemoryMappedFileBuffer.java
Normal file
@@ -0,0 +1,171 @@
|
||||
package com.squareup.haha.perflib.io;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.nio.channels.FileChannel;
|
||||
|
||||
/* loaded from: classes.dex */
|
||||
public class MemoryMappedFileBuffer implements HprofBuffer {
|
||||
static final /* synthetic */ boolean $assertionsDisabled = false;
|
||||
private static final int DEFAULT_PADDING = 1024;
|
||||
private static final int DEFAULT_SIZE = 1073741824;
|
||||
private final int mBufferSize;
|
||||
private final ByteBuffer[] mByteBuffers;
|
||||
private long mCurrentPosition;
|
||||
private final long mLength;
|
||||
private final int mPadding;
|
||||
|
||||
MemoryMappedFileBuffer(File file, int i, int i2) throws IOException {
|
||||
this.mBufferSize = i;
|
||||
this.mPadding = i2;
|
||||
this.mLength = file.length();
|
||||
int i3 = ((int) (this.mLength / this.mBufferSize)) + 1;
|
||||
this.mByteBuffers = new ByteBuffer[i3];
|
||||
FileInputStream fileInputStream = new FileInputStream(file);
|
||||
long j = 0;
|
||||
for (int i4 = 0; i4 < i3; i4++) {
|
||||
try {
|
||||
this.mByteBuffers[i4] = fileInputStream.getChannel().map(FileChannel.MapMode.READ_ONLY, j, Math.min(this.mLength - j, this.mBufferSize + this.mPadding));
|
||||
this.mByteBuffers[i4].order(HprofBuffer.HPROF_BYTE_ORDER);
|
||||
j += this.mBufferSize;
|
||||
} finally {
|
||||
fileInputStream.close();
|
||||
}
|
||||
}
|
||||
this.mCurrentPosition = 0L;
|
||||
}
|
||||
|
||||
private int getIndex() {
|
||||
return (int) (this.mCurrentPosition / this.mBufferSize);
|
||||
}
|
||||
|
||||
private int getOffset() {
|
||||
return (int) (this.mCurrentPosition % this.mBufferSize);
|
||||
}
|
||||
|
||||
public void dispose() {
|
||||
for (int i = 0; i < this.mByteBuffers.length; i++) {
|
||||
try {
|
||||
this.mByteBuffers[i].cleaner().clean();
|
||||
} catch (Exception unused) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override // com.squareup.haha.perflib.io.HprofBuffer
|
||||
public boolean hasRemaining() {
|
||||
return this.mCurrentPosition < this.mLength;
|
||||
}
|
||||
|
||||
@Override // com.squareup.haha.perflib.io.HprofBuffer
|
||||
public long position() {
|
||||
return this.mCurrentPosition;
|
||||
}
|
||||
|
||||
@Override // com.squareup.haha.perflib.io.HprofBuffer
|
||||
public void read(byte[] bArr) {
|
||||
int index = getIndex();
|
||||
this.mByteBuffers[index].position(getOffset());
|
||||
if (bArr.length <= this.mByteBuffers[index].remaining()) {
|
||||
this.mByteBuffers[index].get(bArr, 0, bArr.length);
|
||||
} else {
|
||||
int position = this.mBufferSize - this.mByteBuffers[index].position();
|
||||
this.mByteBuffers[index].get(bArr, 0, position);
|
||||
int i = index + 1;
|
||||
this.mByteBuffers[i].position(0);
|
||||
this.mByteBuffers[i].get(bArr, position, bArr.length - position);
|
||||
}
|
||||
this.mCurrentPosition += bArr.length;
|
||||
}
|
||||
|
||||
@Override // com.squareup.haha.perflib.io.HprofBuffer
|
||||
public byte readByte() {
|
||||
byte b = this.mByteBuffers[getIndex()].get(getOffset());
|
||||
this.mCurrentPosition++;
|
||||
return b;
|
||||
}
|
||||
|
||||
@Override // com.squareup.haha.perflib.io.HprofBuffer
|
||||
public char readChar() {
|
||||
char c = this.mByteBuffers[getIndex()].getChar(getOffset());
|
||||
this.mCurrentPosition += 2;
|
||||
return c;
|
||||
}
|
||||
|
||||
@Override // com.squareup.haha.perflib.io.HprofBuffer
|
||||
public double readDouble() {
|
||||
double d = this.mByteBuffers[getIndex()].getDouble(getOffset());
|
||||
this.mCurrentPosition += 8;
|
||||
return d;
|
||||
}
|
||||
|
||||
@Override // com.squareup.haha.perflib.io.HprofBuffer
|
||||
public float readFloat() {
|
||||
float f = this.mByteBuffers[getIndex()].getFloat(getOffset());
|
||||
this.mCurrentPosition += 4;
|
||||
return f;
|
||||
}
|
||||
|
||||
@Override // com.squareup.haha.perflib.io.HprofBuffer
|
||||
public int readInt() {
|
||||
int i = this.mByteBuffers[getIndex()].getInt(getOffset());
|
||||
this.mCurrentPosition += 4;
|
||||
return i;
|
||||
}
|
||||
|
||||
@Override // com.squareup.haha.perflib.io.HprofBuffer
|
||||
public long readLong() {
|
||||
long j = this.mByteBuffers[getIndex()].getLong(getOffset());
|
||||
this.mCurrentPosition += 8;
|
||||
return j;
|
||||
}
|
||||
|
||||
@Override // com.squareup.haha.perflib.io.HprofBuffer
|
||||
public short readShort() {
|
||||
short s = this.mByteBuffers[getIndex()].getShort(getOffset());
|
||||
this.mCurrentPosition += 2;
|
||||
return s;
|
||||
}
|
||||
|
||||
@Override // com.squareup.haha.perflib.io.HprofBuffer
|
||||
public void readSubSequence(byte[] bArr, int i, int i2) {
|
||||
this.mCurrentPosition += i;
|
||||
int index = getIndex();
|
||||
this.mByteBuffers[index].position(getOffset());
|
||||
if (bArr.length <= this.mByteBuffers[index].remaining()) {
|
||||
this.mByteBuffers[index].get(bArr, 0, bArr.length);
|
||||
} else {
|
||||
int position = this.mBufferSize - this.mByteBuffers[index].position();
|
||||
this.mByteBuffers[index].get(bArr, 0, position);
|
||||
int min = Math.min(i2 - position, bArr.length - position);
|
||||
int i3 = ((min + r3) - 1) / this.mBufferSize;
|
||||
int i4 = position;
|
||||
for (int i5 = 0; i5 < i3; i5++) {
|
||||
int min2 = Math.min(min, this.mBufferSize);
|
||||
int i6 = index + 1 + i5;
|
||||
this.mByteBuffers[i6].position(0);
|
||||
this.mByteBuffers[i6].get(bArr, i4, min2);
|
||||
i4 += min2;
|
||||
min -= min2;
|
||||
}
|
||||
}
|
||||
this.mCurrentPosition += Math.min(bArr.length, i2);
|
||||
}
|
||||
|
||||
@Override // com.squareup.haha.perflib.io.HprofBuffer
|
||||
public long remaining() {
|
||||
return this.mLength - this.mCurrentPosition;
|
||||
}
|
||||
|
||||
@Override // com.squareup.haha.perflib.io.HprofBuffer
|
||||
public void setPosition(long j) {
|
||||
this.mCurrentPosition = j;
|
||||
}
|
||||
|
||||
public MemoryMappedFileBuffer(File file) throws IOException {
|
||||
this(file, DEFAULT_SIZE, 1024);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user