貌似解码是个大问题 我用的是 ImageIO.write(....)将图片存入到了文件里面 将文件中信息打包发送出去
然后接收并存入另一个文件中 然后用 BufferedImage bi = ImageIO.read(....) 想把它转换回来 结果转不回来了 
显示bi为null
求该如何解决这一个问题啊 
附上源码 

解决方案 »

  1.   

    import java.awt.AWTException;
    import java.awt.Dimension;
    import java.awt.Rectangle;
    import java.awt.Robot;
    import java.awt.Toolkit;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.IOException;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetSocketAddress;
    import java.net.SocketException;import javax.imageio.ImageIO;
    import javax.imageio.stream.FileImageInputStream;
    public class Server {

    Robot r;
    BufferedImage bi;

    DatagramSocket ds;
    DatagramPacket dp;

    public Server() {

    try {
    ds = new DatagramSocket(8080);
    r = new Robot();
    } catch (AWTException e) {
    e.printStackTrace();
    } catch (SocketException e) {
    e.printStackTrace();
    }
    new ServerThread().start();
    }

    public class ServerThread extends Thread {

    public void run() {

    Dimension scrSize = Toolkit.getDefaultToolkit().getScreenSize();
    Rectangle rec = new Rectangle(scrSize.width, scrSize.width);

    File file = new File("src/fsend");
    while (true) {
    bi = r.createScreenCapture(rec);
    System.out.println("bi:"+bi);
    try {
    file.createNewFile();
    FileImageInputStream fiis = new FileImageInputStream(file);
    System.out.println(fiis);
    ImageIO.write(bi, "JPEG", file);
    byte []buf = new byte[1024];
    int len = 0;
    while ((len = fiis.read(buf)) != -1) {
    fiis.read(buf);
    dp = new DatagramPacket(buf, len, new InetSocketAddress("localhost",8081));
    ds.send(dp);
    }
    dp = new DatagramPacket("end".getBytes(), 3, new InetSocketAddress("localhost",8081));
    ds.send(dp);
    file.delete();
    fiis.close();
    sleep(1000);
    } catch (InterruptedException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }

    }

    }

    public static void main(String[] args) {
    new Server();
    }

    }
      

  2.   

    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.IOException;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.SocketException;import javax.imageio.ImageIO;
    import javax.imageio.stream.FileImageOutputStream;public class Client {
    BufferedImage bi; DatagramSocket ds;
    DatagramPacket dp; public Client() { try {
    ds = new DatagramSocket(8081);
    } catch (SocketException e) {
    e.printStackTrace();
    }
    new ReThread().start();
    } public class ReThread extends Thread { public void run() { byte []buf = new byte[1024];
    File file = new File("src/freceive");
    while (true) {
    try {
    file.createNewFile();
    FileImageOutputStream fios = new FileImageOutputStream(file);
    while (true) {
    dp = new DatagramPacket(buf, buf.length);
    ds.receive(dp);
    if (new String(dp.getData(),0,dp.getLength()).equals("end")){
    System.out.println("接收完图片");
    break;
    }
    fios.write(dp.getData());
    }
    bi = ImageIO.read(file);
    System.out.println(bi);
    fios.close();
    sleep(1000);
    } catch (IOException e) {
    e.printStackTrace();
    } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    } } } public static void main(String[] args) {
    new Client();
    }}
      

  3.   

    弱弱的顶自己一下 如果先把流转换为图片 再弄成BufferedImage 不知是否可行
      

  4.   

    你用 UDP ? 如果数据丢失的话,会导致解码错误啊。
      

  5.   

    没看懂,我觉得为啥不用TCP呢?一个Socket然后发送数据,另一面接受数据,多简单啊!