¿Obtener bytes del archivo en incrementos de 512 y enviarlos a través de una red?

tengo el siguiente código. Funciona en la medida en que se envía el primer paquete, pero una vez que ingresa al bucle while, el valor cambia a -1 y, por lo tanto, no repite ese fragmento de código una vez que el bucle se completa una vez. Estoy tratando de poner 512 bytes de datos en un paquete a la vez y luego enviarlo a través de la red, pero esto no funciona debido a lo anterior. Estaría agradecido si alguien pudiera señalar lo que estoy haciendo mal y posiblemente sugerir una solución.

            InetAddress address = packet.getAddress();
            int port = packet.getPort();
            RRQ RRQ = new RRQ();
            int offset = 0;
            int length = 512;
            int block = 0;
            byte[] readBytes = new byte[512];
            File file = new File(filename);
            FileInputStream is = new FileInputStream(file);
            int fileBytes = is.read(readBytes, offset, length);
            DatagramPacket outPacket = RRQ.doRRQ(readBytes, block, address, port);
            socket.send(outPacket);
            System.out.println("Packet sent");
            System.out.println(fileBytes);

            byte[] outputop = new byte[2];
            outputop = outPacket.getData();
            System.out.println(outputop[0]);
            System.out.println(outputop[1]);
            System.out.println("fileBytes = " + fileBytes);

            block++;
            while (fileBytes != -1){

                socket.receive(packet);
                fileBytes = is.read(readBytes, offset, length);
                System.out.println("fileBytes = " + fileBytes);
                outPacket = RRQ.doRRQ(readBytes, block, address, port);
                outputop = outPacket.getData();
                System.out.println(outputop[0]);
                System.out.println(outputop[1]);
                socket.send(outPacket);
                System.out.println("Packet sent");
                block++;
                System.out.println(fileBytes);

            }

clase RRQ

public DatagramPacket doRRQ(byte[] data, int block, InetAddress address, int port){

int bufferOffset = 4;
int dataOffset = 0;
byte byteBlock = (byte)block++;
byte[] buffer = new byte[516];
DatagramPacket packet = new DatagramPacket(buffer, buffer.length, address, port);
buffer[0] = 0;
buffer[1] = 3;
buffer[2] = 0;
buffer[3] = byteBlock;
for(byte item:data){

    buffer[bufferOffset] = data[dataOffset];
    bufferOffset++;
    dataOffset++;

}

return packet;

preguntado el 22 de mayo de 12 a las 18:05

Al leer sobre esto, creo que necesito usar un canal para el archivo y ByteBuffer. -

1 Respuestas

Bueno, parece que su archivo tiene solo 512 bytes de datos, porque se devuelve -1 cuando se alcanza el final del archivo, como se indica aquí: http://docs.oracle.com/javase/6/docs/api/java/ io/FileInputStream.html#read(byte[], int, int)

contestado el 22 de mayo de 12 a las 19:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.