RLPark 1.0.0
Reinforcement Learning Framework in Java
|
00001 package rlpark.plugin.rltoys.experiments.scheduling.internal.messages; 00002 00003 import static rlpark.plugin.rltoys.experiments.scheduling.internal.messages.Messages.Header; 00004 import static rlpark.plugin.rltoys.experiments.scheduling.internal.messages.Messages.HeaderSize; 00005 00006 import java.io.ByteArrayInputStream; 00007 import java.io.DataInputStream; 00008 import java.io.IOException; 00009 import java.io.InputStream; 00010 00011 import rlpark.plugin.rltoys.experiments.scheduling.internal.messages.Messages.MessageType; 00012 00013 public class MessageBinary extends Message { 00014 private int fullSizeRead; 00015 private byte[] content; 00016 00017 public MessageBinary() { 00018 super(MessageType.Error); 00019 } 00020 00021 private void throwAlignmentError() { 00022 throw new RuntimeException("Alignment error"); 00023 } 00024 00025 private void readHeader(InputStream in) throws IOException { 00026 DataInputStream dataIn = new DataInputStream(in); 00027 if (dataIn.readByte() != Header[0]) 00028 throwAlignmentError(); 00029 if (dataIn.readByte() != Header[1]) 00030 throwAlignmentError(); 00031 if (dataIn.readByte() != Header[2]) 00032 throwAlignmentError(); 00033 fullSizeRead = dataIn.readInt(); 00034 type = Messages.MessageType.values()[dataIn.readInt()]; 00035 } 00036 00037 public void read(InputStream inputStream) throws IOException { 00038 readHeader(inputStream); 00039 content = new byte[fullSizeRead - HeaderSize]; 00040 int dataToRead = content.length; 00041 while (dataToRead > 0) { 00042 int dataRead = inputStream.read(content, content.length - dataToRead, dataToRead); 00043 dataToRead -= dataRead; 00044 } 00045 } 00046 00047 public byte[] content() { 00048 return content; 00049 } 00050 00051 public InputStream contentInputStream() { 00052 return new ByteArrayInputStream(content); 00053 } 00054 }