2009-04-22 11 views
6

Ho intenzione di utilizzare la funzione markSupported per controllare il primo byte per verificare il formato e quindi resettarlo, per favore dimmi quale stream deve essere usato per la comunicazione basata su TCP in java. Per la maggior parte dei flussi come datainputstream non fornisce questa funzionalità. Si prega di darmi alcuni suggerimenti per utilizzare mark e reset.Come usare markSupported feature di inputstream java

risposta

8

È possibile utilizzare uno BufferedInputStream intorno a qualsiasi altro flusso che si ha. Questo è garantito per supportare mark/reset, a condizione che non si cerchi di leggere oltre la dimensione del buffer dopo la marcatura.

+2

+1 Perché ho bisogno di una ricerca su google e una domanda tangenzialmente correlata per risolvere un problema la cui soluzione è denominata e documentata in modo intuitivo? Ah i misteri della mente umana .... –

8

Dai uno sguardo allo PushbackInputStream, che sembra sia stato progettato per fare ciò che desideri.

Completa un flusso di input esistente e consente di leggere un byte e quindi di reinserirlo. Da Javadoc:

Un PushbackInputStream aggiunge funzionalità a un altro flusso di input, ovvero la possibilità di "respingere" o "non letto" un byte. Ciò è utile in situazioni in cui è conveniente che un frammento di codice legga un numero indefinito di byte di dati che sono delimitati da un particolare valore di byte; dopo aver letto il byte di terminazione, il frammento di codice può "non leggerlo", in modo che la successiva operazione di lettura sul flusso di input rileggerà il byte che è stato richiamato indietro. Ad esempio, i byte che rappresentano i caratteri che costituiscono un identificatore potrebbero essere terminati da un byte che rappresenta un carattere operatore; un metodo il cui compito è leggere solo un identificatore può leggere fino a quando vede l'operatore e quindi spingere indietro l'operatore per essere riletto.

+0

mai notato questa classe !!! Mi piace imparare! – dfa