Use blocking for input reader

This commit is contained in:
Iwan Timmer
2015-01-04 20:30:26 +01:00
parent b88c5f0d65
commit 12d441b493
+4 -8
View File
@@ -5,15 +5,15 @@ import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.FileNotFoundException; import java.io.FileNotFoundException;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
import java.nio.ByteOrder; import java.nio.ByteOrder;
import java.nio.channels.FileChannel;
public abstract class EvdevReader implements Runnable { public abstract class EvdevReader implements Runnable {
private final static int EVIOCGNAME = 0x06; private final static int EVIOCGNAME = 0x06;
private FileChannel deviceInput; private InputStream in;
private ByteBuffer inputBuffer; private ByteBuffer inputBuffer;
public EvdevReader(String device) throws FileNotFoundException, IOException { public EvdevReader(String device) throws FileNotFoundException, IOException {
@@ -30,8 +30,7 @@ public abstract class EvdevReader implements Runnable {
LimeLog.info("Using " + new String(data)); LimeLog.info("Using " + new String(data));
FileInputStream in = new FileInputStream(file); in = new FileInputStream(file);
deviceInput = in.getChannel();
inputBuffer = ByteBuffer.allocate(EvdevConstants.MAX_STRUCT_SIZE_BYTES); inputBuffer = ByteBuffer.allocate(EvdevConstants.MAX_STRUCT_SIZE_BYTES);
inputBuffer.order(ByteOrder.nativeOrder()); inputBuffer.order(ByteOrder.nativeOrder());
} }
@@ -49,10 +48,7 @@ public abstract class EvdevReader implements Runnable {
public void run() { public void run() {
try { try {
while (true) { while (true) {
while(inputBuffer.remaining()==EvdevConstants.MAX_STRUCT_SIZE_BYTES) inputBuffer.limit(in.read(inputBuffer.array()));
deviceInput.read(inputBuffer);
inputBuffer.flip();
parseEvent(inputBuffer); parseEvent(inputBuffer);
inputBuffer.clear(); inputBuffer.clear();
} }