2014-01-26 2 views
0

У меня есть ниже фрагмент кода, который отлично работает при запуске из затменияпосылка данных через сеть не работает в java.io API

String str = "testing"; 
InputStream is = new ByteArrayInputStream(str.getBytes()); 
int length = is.available(); 
byte[] data = new byte[length]; 
is.read(data, 0, length); 
System.out.println("output "+new String(data));  

Когда я нарушу этот код, чтобы отправить данные по сети с использованием Jerser API клиента и попробуйте прочитать его на сервере с помощью Джерси. Я не получаю значение, которое я опубликовал. Клиентский код выглядит следующим образом

public static void main(String s[]) throws IOException { 
    ClientConfig config = new DefaultClientConfig(); 
    Client client = Client.create(config); 
    String str = "testingthi"; 
    InputStream is = new ByteArrayInputStream(str.getBytes()); 
    WebResource webResource = client.resource("http://192.168.1.15:8090/JersySample/resources/stream/upload"); 

    ClientResponse response = webResource.type(MediaType.APPLICATION_OCTET_STREAM).post(ClientResponse.class,is); 
    is.close(); 
} 

код на сервер выглядит следующим образом

@Consumes(MediaType.APPLICATION_OCTET_STREAM) 
public Response upload(InputStream is) { 
    try{ 
     int size = is.available(); 
     byte data[] = new byte[size]; 
     is.read(data,0,size);   
     System.out.println(" Posted data is "+ new String(data)+" length is "+size+" stream size "+is.available()); 
     is.close(); 
    }catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return Response.ok().entity("Done").build(); 
} 

Когда я прочитал строку с помощью Apache-Обще-Io API я получаю строковое значение, которое я отправил. Может кто-то объяснить, почему он не работает, используя API java.io, который работал в несетевой ситуации?

+0

Вы не «отправляете InputStream по сети». Вы не можете. Вы отправляете * данные * по сети. – EJP

ответ

1

Вы принимаете обычную ошибку, считая, что read() заполняет буфер. Он не обязан это делать. См. Javadoc. Обязательно читать хотя бы один байт и возвращаться. Количество байтов, возврат -1 или выдача исключения IOException.

Вы также злоупотребляете имеющимися(). Он не возвращает общее количество байтов в потоке, и способ, которым вы его используете, специально предупреждается в Javadoc.

+0

Почему это работает, когда я запускаю его в eclipse, но не удается, когда я использую те же методы api по сети? –

 Смежные вопросы

  • Нет связанных вопросов^_^