import java.io.File;
import java.io.FileInputStream;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
public class MainClass {
public static void main(String[] args) {
try {
test();
} catch (Exception e) {
e.printStackTrace();
}
}
private static void test() throws Exception {
File aFile = new File("primes.txt");
FileInputStream inFile = new FileInputStream(aFile);
FileChannel inChannel = inFile.getChannel();
ByteBuffer buf = ByteBuffer.allocateDirect(1024);
buf.position(buf.limit());
while (true) {
if (buf.remaining() < 8) {
if (inChannel.read(buf.compact()) == -1){
break;
}
buf.flip();
}
int strLength = (int) buf.getDouble();
if (buf.remaining() < 2 * strLength) {
if (inChannel.read(buf.compact()) == -1){
break;
}
buf.flip();
}
byte[] strChars = new byte[2 * strLength];
buf.get(strChars);
if (buf.remaining() < 8) {
if (inChannel.read(buf.compact()) == -1){
break;
}
buf.flip();
}
System.out.println(strLength);
System.out.println(ByteBuffer.wrap(strChars).asCharBuffer());
System.out.println(buf.getLong());
}
inFile.close();
}
}
|