Created
June 23, 2019 15:51
-
-
Save sendya/093f523f6ca235c2d1583d7cf9f7a0d8 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.io.*; | |
import java.nio.MappedByteBuffer; | |
import java.nio.channels.FileChannel; | |
import java.nio.file.Paths; | |
import java.nio.file.StandardOpenOption; | |
public class Main { | |
private static int length = 0x2FFFFFFF;//1G | |
private abstract static class Tester { | |
private String name; | |
public Tester(String name) { | |
this.name = name; | |
} | |
public void runTest() { | |
System.out.print(name + ": "); | |
long start = System.currentTimeMillis(); | |
test(); | |
System.out.println(System.currentTimeMillis()-start+" ms"); | |
} | |
public abstract void test(); | |
} | |
private static Tester[] testers = { | |
/*new Tester("Stream RW") { | |
public void test() { | |
try (FileInputStream fis = new FileInputStream( | |
"src/a.txt"); | |
DataInputStream dis = new DataInputStream(fis); | |
FileOutputStream fos = new FileOutputStream( | |
"src/a.txt"); | |
DataOutputStream dos = new DataOutputStream(fos);) { | |
byte b = (byte)0; | |
for(int i=0;i<length;i++) { | |
dos.writeByte(b); | |
dos.flush(); | |
} | |
while (dis.read()!= -1) { | |
} | |
} catch (IOException e) { | |
e.printStackTrace(); | |
} | |
} | |
},*/ | |
new Tester("Mapped RW") { | |
public void test() { | |
try (FileChannel channel = FileChannel.open(Paths.get("src/b.txt"), | |
StandardOpenOption.READ, StandardOpenOption.WRITE);) { | |
MappedByteBuffer mapBuffer = channel.map(FileChannel.MapMode.READ_WRITE, 0, length); | |
for(int i=0;i<length;i++) { | |
mapBuffer.put((byte)0); | |
} | |
mapBuffer.flip(); | |
while(mapBuffer.hasRemaining()) { | |
mapBuffer.get(); | |
} | |
} catch (IOException e) { | |
e.printStackTrace(); | |
} | |
} | |
}, | |
new Tester("Mapped PRIVATE") { | |
public void test() { | |
try (FileChannel channel = FileChannel.open(Paths.get("src/c.txt"), | |
StandardOpenOption.READ, StandardOpenOption.WRITE);) { | |
MappedByteBuffer mapBuffer = channel.map(FileChannel.MapMode.PRIVATE, 0, length); | |
for(int i=0;i<length;i++) { | |
mapBuffer.put((byte)0); | |
} | |
mapBuffer.flip(); | |
while(mapBuffer.hasRemaining()) { | |
mapBuffer.get(); | |
} | |
} catch (IOException e) { | |
e.printStackTrace(); | |
} | |
} | |
} | |
}; | |
public static void main(String[] args) { | |
for(Tester tester:testers) { | |
tester.runTest(); | |
} | |
} | |
/** | |
* | |
* head: int32 | |
* price: BigDecimal[20, 10] | |
* preload: { id: char[32], priority: int8, } | |
* | |
*/ | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment