Sto indovinando che la domanda è formulata in modo non corretto. Ho trovato questo quando cercavo una risposta al motivo per cui il mio uso di InputStream e OutputStream sembrava impostare l'intero array su 0 incontrando un byte di valore 0. Si assume che i byte contengano ASCII valido e non binario. Dal momento che la domanda non arriva e chiede questo, e nessuno sembra averlo preso come una possibilità, credo che dovrò soddisfare la mia ricerca altrove.
Quello che stavo cercando di fare era scrivere una classe TransparentSocket in grado di istanziare un TCP (Socket/ServerSocket) o un UDP (DatagramSocket) per utilizzare il DatagramPacket in modo trasparente. Funziona per UDP, ma non (ancora) per TCP.
Follow-up: mi sembra di aver verificato che questi flussi sono essi stessi inutili per i trasferimenti binari, ma che possono essere passati a un'istanza più adatta ai programmatori, ad es.,
nuovo DataOutputStream (socket.getOutputStream()) writeInt (5).;
^Tanto per quell'idea. Scrive i dati in un modo "portatile", vale a dire, probabilmente ASCII, che non aiuta affatto, soprattutto quando si emula software su cui non ho controllo!
fonte
2012-12-07 17:41:25
come posso fare un loop? come quando aspetti un flusso di input –
@ChristopherFrancisco Loop? Basta chiamare i metodi da un ciclo. Se si intende attendere un messaggio senza arrestare il programma, è sufficiente eseguire l'I/O su un thread separato o modificarlo per utilizzare NIO. –
Non ho ancora testato, ma se len> [TCP dimensione del pacchetto], penso che readFully() potrebbe non leggere tutti i contenuti, ma solo i primi parti disponibili .... (https://docs.oracle.com/javase/ 7/docs/api/java/io/DataInput.html # readFully (byte [])) Quindi, questo codice potrebbe non funzionare come in questo caso, giusto? – ntg