Java 不断刷新图像

Java 不断刷新图像,java,ios,sockets,server,Java,Ios,Sockets,Server,我正在尝试从Java客户端向iOS应用程序发送图像。我需要尽快发送图像以获得高fps。我尝试使用套接字,但速度太慢,所以现在我正在从客户端上传到服务器,并用应用程序下载。这在使用java接收器时有效,但在应用程序上无效。在应用程序上查看时,图像会显示为黑色,因为图像会一次又一次地保存。在java中,图像会刷新,可以看到帧,但在iOS中,图像总是黑色的。还有什么我可以解决的吗?还是我需要找到更好的方法来传输图像?谢谢 我的上传代码: public static BufferedImage resi

我正在尝试从Java客户端向iOS应用程序发送图像。我需要尽快发送图像以获得高fps。我尝试使用套接字,但速度太慢,所以现在我正在从客户端上传到服务器,并用应用程序下载。这在使用java接收器时有效,但在应用程序上无效。在应用程序上查看时,图像会显示为黑色,因为图像会一次又一次地保存。在java中,图像会刷新,可以看到帧,但在iOS中,图像总是黑色的。还有什么我可以解决的吗?还是我需要找到更好的方法来传输图像?谢谢

我的上传代码:

public static BufferedImage resize(BufferedImage img, int newW, int newH) {
    int w = img.getWidth();
    int h = img.getHeight();
    BufferedImage dimg = new BufferedImage(newW, newH, img.getType());
    Graphics2D g = dimg.createGraphics();
    g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
            RenderingHints.VALUE_INTERPOLATION_BILINEAR);
    g.drawImage(img, 0, 0, newW, newH, 0, 0, w, h, null);
    g.dispose();
    return dimg;
}

public void uploadToServer() {

    String server = "ip";
    int port = 21;
    String user = "user";
    String pass = "pass";

    FTPClient ftpClient = new FTPClient();
    try {

        ftpClient.connect(server, port);
        ftpClient.login(user, pass);
        ftpClient.enterLocalPassiveMode();

        ftpClient.setFileType(FTP.BINARY_FILE_TYPE);

        ByteArrayOutputStream os = new ByteArrayOutputStream();

        int w = 765;
        int h = 503;
        double d = .75;

        ImageIO.write(
                resize(client.methods.getClientImage(), (int) (w * d),
                        (int) (h * d)), "JPG", os);

        InputStream inputStream = new ByteArrayInputStream(os.toByteArray());

        String secondRemoteFile = "public_html/iRS/client_img.jpg";

        // System.out.println("Start uploading file");
        OutputStream outputStream = ftpClient
                .storeFileStream(secondRemoteFile);

        byte[] bytesIn = new byte[4096];
        int read = 0;

        while ((read = inputStream.read(bytesIn)) != -1) {
            outputStream.write(bytesIn, 0, read);
        }

        inputStream.close();
        outputStream.close();
        ftpClient.completePendingCommand();

    } catch (IOException ex) {
        System.out.println("Error: " + ex.getMessage());
        ex.printStackTrace();
    } finally {
        try {
            if (ftpClient.isConnected()) {
                ftpClient.logout();
                ftpClient.disconnect();
                Tools.log("Disconnected");
            }
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }
}
下载代码:

- (void) refreshImage {
        client.image = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL   URLWithString:@"url"]]]; ;
}

如果只需要几毫秒,不要将其存储在文件中。 将文件下载到NSData并将其传递到UIImage。 下面是我的HTTP客户机类中的一些示例代码。 以下方法启动下载任务:

- (NSURLSessionTask *) startGetTaskForURL: (NSURL *) url {
    NSLog(@"startGetTaskForUrl: %@", url);
    NSURLSessionTask *task = [self.session dataTaskWithURL:url];
    NSMutableData *data = [NSMutableData data];
    [task resume];
    [self.runningTasks setObject:data forKey:task];
    return task;
}
每次有可用数据时,都会调用以下委托方法。数据在创建任务时创建的NSMutableData中收集:

- (void) URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data {
    NSString *dataString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    NSLog(@"HTTPClient: Data task received data: %@", dataString);
    NSMutableData *runningData = [self dataForTask:dataTask];
    if (!runningData) {
        NSLog(@"No data found for task");
        return;
    }
    [runningData appendData: data];
}
下载任务完成时,将调用以下委托方法:

- (void) URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error {
    NSLog(@"HTTPClient: Task completed with error: %@", error);
    [self.delegate sessionTask:task completedWithError:error data:[self dataForTask:task]];
}

保存到临时文件,而不是不断覆盖同一个文件。我只尝试上载了一次图像,以查看我是否正确上载,它以紫色色调保存,这使我相信我没有正确保存它。我会发布我的代码。我不是cocoa中最好的,你能给我更多关于如何使用这个的例子吗?我发布了我用于图像刷新的内容。