Comment convertir un tableau d'octets à tampon d'image

J'ai un serveur de code java qui obtient un tableau d'octets à partir du client. Afin de faire un peu de traitement d'image, j'ai besoin de convertir le tableau d'octets en une BufferedImage. J'ai un code qui est censé le faire ici:

public void processImage(byte[] data) {
    ByteArrayInputStream stream = new ByteArrayInputStream(data);
    BufferedImage bufferedImage;
    bufferedImage = ImageIO.read(stream);

    //bufferedImage is null
    //...
}

Mais cela ne fonctionne pas; bufferedImage est null. Selon le ImageIO documentation:

Si pas enregistré ImageReader prétend être capable de lire les flux résultant, null est retourné.

Comment dois-je dire à la ImageReader ce type d'image, il est. Par exemple, si je sais que l'image JPEG (qui est, dans mon cas), que suis-je censé faire?

EDIT: Merci pour la suggestion que le fichier est probablement pas au format JPEG. C'est le code côté client que j'ai qui envoie les données en tant que Chaîne de caractères sur le serveur:

import org.json.JSONObject;

//Client-side code that sends image to server as String
public void sendImage() {
    FileInputStream inputStream = new FileInputStream(new File("myImage.jpg"));
    ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
    byte[] b = new byte[1024];
    while ((bytesRead = inputStream.read(b)) != -1) {
        byteStream.write(b,0,bytesRead);
    }
    byte[] byteArray = byteStream.toByteArray();

    JSONObject jsonObject = new JSONObject();
    jsonObject.put("data",new String(byteArray));

    //... more code here that sends jsonObject in HTTP post body
}

Et c'est du côté serveur, le code qui appelle la processImage() fonction:

//Server-side code that calls processImage() function
public void handleRequest(String jsonData) {
    JSONObject jsonObject = new JSONObject(jsonData);
    processImage(jsonObject.getString("data").getBytes());
}
Pour mieux aider plus tôt, après une SSCCE.
Êtes-vous sûr que le tableau d'octets a de bonnes données? Avez-vous essayé de faire un simple test avec un programme qui lit une image, le convertit en un tableau d'octets, puis la convertit en tableau d'octets de l'image.
ImageIO reconnaît un bon JPEG à l'aide du code que vous avez posté. Ainsi, les plus susceptibles de l'image n'est pas au format JPEG. Le moyen facile de test, est de vider le tableau de données sur le disque, et voir à quoi il ressemble. Essayez de l'ouvrir dans un autre logiciel ou dans un éditeur hexadécimal. Peut-être le tableau de données contient les décodé pixels à partir d'un fichier JPEG?
Merci, j'ai ajouté plus de code dans l'espoir de mieux expliquer ce que mon code est fait
"j'ai ajouté plus de code.." Pourquoi? J'ai suggéré un SSCCE - un assez spécifique & autre chose.

OriginalL'auteur baekacaek | 2013-11-16