Problemas com InputStream

Olá pessoal!!!

Preciso enviar um arquivo pela rede, vocês sabe qual é a implementação de InputStream q também implementa Serializable??

Obrigado!

cara não faz sentido um input stream tb implementar serializable

tenho um exemplinho de socket.

Socket socket = new Socket("localhost", 5656);
OutputStream os = socket.getOutputStream();
os.write("TESTANDO\n".getBytes());
os.close();
socket.close();

é só ver agora a implementação de output stream que te melhor serve :slight_smile:

Silveta, muito obrigado!

Mas na verdade o q eu preciso é enviar um BufferedImage pela rede e pegar ele do outro lado, mas não sei como, não fou utilizar socketes, isso é transparente pra mim, eu só preciso q seja serializable.

BufferedImage, se não me engano, também não é serializável.
Tente converter a imagem para um formato sem perdas (como PNG), e mande os bytes da imagem como PNG mesmo.

[quote=thingol]BufferedImage, se não me engano, também não é serializável.
Tente converter a imagem para um formato sem perdas (como PNG), e mande os bytes da imagem como PNG mesmo. [/quote]

Thingol,

Como seria a melhor forma de transformar o bufferedImage em um outro objeto serializavel e depois retransforma-lo em um bufferedImage?

Qual o sentido de mandar um componente awt para outro computador?

É que eu necessito processar imagem em um outro computador, fazendo a segmentação dela e depois tenho q receber de volta a imagem resultante…

Ah entendo.

Uma solução é usar o ImageIO.write, que recebe esse BufferedReader(que é um RenderedImage), mandar pra um OutputStream.

Do outro lado, usar o ImageIO.read para receber um InputStream da aplicação que tá mandando, e retorna um BufferedImage pronto.

O mais difícil é a parte do meio que liga as duas pontas :slight_smile:

Eu consegui fazendo assim… mas tah comendo memória… alguma sugestão???

[code]
public class MapFile {

/**
 * This constructor should always be used when construcing a new instance.
 * @param file the map file that can be read by Java (.png, .jpg, etc.).
 */
public String convertToString(java.io.File file){
	String map = null;
    try {
        StringBuffer sb = new StringBuffer(1024);
        char[] characterArray = new char[1024];
        BufferedReader br = new BufferedReader(new FileReader(file));
        while(br.read(characterArray) != -1){
            sb.append(String.valueOf(characterArray));
        }
        br.close();
        map = sb.toString();
    } catch (IOException ex) {
        ex.printStackTrace();
    }
    return map;
}

/**
 * Gets a <tt>BufferedImage</tt>> that represents the map.
 * @return the map in the form of a <tt>BufferedImage</tt>.
 * @see java.awt.BufferedImage
 */
public java.awt.image.BufferedImage getBufferedImage( String img ){
    ByteArrayInputStream bais = new ByteArrayInputStream(img.getBytes());
    try {
        return ImageIO.read(bais);
    } catch (IOException ex) {
        ex.printStackTrace();
    }
    return null;
}

}[/code]

Não use Strings(eles não aguentam o tamanho dos arquivos). Use os Streams.

Procure no Google sobre conversões de InputStream p/ OutputStream.