java – BufferUnderflowException?这里?
发布时间:2020-12-15 05:05:45 所属栏目:Java 来源:网络整理
导读:我正在用 Java编写一个小型UDP服务器.当服务器收到命令(‘GET_VIDEO’)时,他会读取一个文件(‘video.raw’),然后将其发送给客户端. 这是我的代码: public class ServeurBouchon { /** * @param args */ public static void main(String[] args) throws Exce
我正在用
Java编写一个小型UDP服务器.当服务器收到命令(‘GET_VIDEO’)时,他会读取一个文件(‘video.raw’),然后将其发送给客户端.
这是我的代码: public class ServeurBouchon { /** * @param args */ public static void main(String[] args) throws Exception { byte[] buff = new byte[64]; int port = 8080; DatagramPacket packet = new DatagramPacket(buff,buff.length); DatagramSocket socket = new DatagramSocket(port); System.out.println("Server started at 8080 ..."); while (true) { socket.receive(packet); new ThreadVideo(socket,packet).run(); } } public static class ThreadVideo extends Thread { private DatagramSocket socket; private DatagramPacket packet; public ThreadVideo(DatagramSocket socket,DatagramPacket packet) { this.packet = packet; this.socket = socket; } public void run() { String cmd = new String(packet.getData(),packet.getLength()); System.out.println("S:CMD re?u :" + cmd); if ("GET_VIDEO".equals(cmd)) { read_and_send_video(this.packet.getAddress()); } else if ("TIMEOUT_REQUEST".equals(cmd)) { return; } else { System.out.println(" Exiting ..."); return; } System.out.println("Fin ....."); } private void read_and_send_video(InetAddress address) { System.out.println(" reading and sending video ..."); File file = new File("./video/video.raw"); ByteBuffer ibb = ByteBuffer.allocate(4); ibb.order(ByteOrder.BIG_ENDIAN); FileInputStream fis = null; DatagramPacket pack; byte[] buff = new byte[4]; System.out.println(" Sending ..."); try { fis = new FileInputStream(file); int size = 0; while ( size != -1) { size = fis.read(buff,buff.length); System.out.println(" size = " + size); ibb.put(buff); System.out.println("Size : " + ibb.getInt()); int length = ibb.getInt(); byte[] fbuff = new byte[length]; fis.read(fbuff,length); pack = new DatagramPacket(fbuff,fbuff.length,address,packet.getPort()); socket.send(pack); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } } } 原始文件格式是连续的“大小框架”. “size”变量包含要读取的下一帧的大小(int).我的问题是当我在读取文件时(在行ibb.getInt()中),我得到了这个异常: Exception in thread "main" java.nio.BufferUnderflowException at java.nio.Buffer.nextGetIndex(Buffer.java:480) at java.nio.HeapByteBuffer.getInt(HeapByteBuffer.java:336) at fr.sar.dss.bouchon.ServeurBouchon$ThreadVideo.read_and_send_video(ServeurBouchon.java:75) at fr.sar.dss.bouchon.ServeurBouchon$ThreadVideo.run(ServeurBouchon.java:48) at fr.sar.dss.bouchon.ServeurBouchon.main(ServeurBouchon.java:29) 也许我这样做错了但是有人可以告诉我我的错误在哪里? Thansk的帮助;) 解决方法
这读了两个整数.
System.out.println("Size : " + ibb.getInt()); int length = ibb.getInt(); 用这个: int length = ibb.getInt(); System.out.println("Size : " + length); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |