Variante di ByteArrayOutputStream

di il
3 risposte

Variante di ByteArrayOutputStream

Ciao a tutti...sto realizzando un protocollo TFTP come esercitazione scolastica. Ho trovato un esempio online che mi sta tornando molto utile per prendere spunto. Il problema è che devo trovare un alternativa alla classe "ByteArrayOutputStream", perchè il prof non vuole che la usiamo non avendola spiegata. Comunque, questo è il codice da qui sto prendendo spunto:

private ByteArrayOutputStream receiveFile() throws IOException {
		ByteArrayOutputStream byteOutOS = new ByteArrayOutputStream();
		int block = 1;
		do {
			System.out.println("TFTP Packet count: " + block);
			block++;
			bufferByteArray = new byte[PACKET_SIZE];
			inBoundDatagramPacket = new DatagramPacket(bufferByteArray,
					bufferByteArray.length, inetAddress,
					datagramSocket.getLocalPort());
                        System.out.println("porta " + datagramSocket.getLocalPort());
                        
			
			//STEP 2.1: receive packet from TFTP server
			datagramSocket.receive(inBoundDatagramPacket);

			// Getting the first 4 characters from the TFTP packet
			byte[] opCode = { bufferByteArray[0], bufferByteArray[1] };

			if (opCode[1] == OP_ERROR) {
				reportError();
			} else if (opCode[1] == OP_DATAPACKET) {
				// Check for the TFTP packets block number
				byte[] blockNumber = { bufferByteArray[2], bufferByteArray[3] };

				DataOutputStream dos = new DataOutputStream(byteOutOS);
				dos.write(inBoundDatagramPacket.getData(), 4,
						inBoundDatagramPacket.getLength() - 4);

				//STEP 2.2: send ACK to TFTP server for received packet
				sendAcknowledgment(blockNumber);
			}

		} while (!isLastPacket(inBoundDatagramPacket));
                System.out.println("Download completato" );
		return byteOutOS;
	}
Dovrei riuscire a realizzare un metodo simile(evito il controllo degli errori che tanto non è richiesto) ma senza usare appunto ByteArrayOutputStream. Ho provato in mille modi, ma se ad esempio creo un semplice array di byte, poi il costruttore di "DataOutputStream" non permette di passarglielo all'interno, perchè accetta solo oggetto di tipo Stream appunto. Con cosa posso sostituirlo? Tra l'altro ho anche dei problemi col codice perchè esce dal ciclo e non scrive il file completo..ma una causa potrebbe essere che appunto manca questo array qui per la ricezione del file. Quindi nel caso posto dopo il mio codice. Se qualcuno sa come aiutarmi gliene sarei molto grato, è 3 giorni che ci sto lavorando con scarsi risultati

3 Risposte

  • Re: Variante di ByteArrayOutputStream

    xXNicolaXx ha scritto:


    Il problema è che devo trovare un alternativa alla classe "ByteArrayOutputStream"
    Con cosa posso sostituirlo?
    ByteArrayOutputStream è semplicemente una estensione di OutputStream in cui tutti i write scrivono su un array interno invece che su un qualche output "fisico" (es. file, socket, ecc..). Con una particolarità: l'array interno viene ri-allocato automaticamente per aumentare in lunghezza man mano che vengono inseriti byte.
  • Re: Variante di ByteArrayOutputStream

    andbin ha scritto:


    xXNicolaXx ha scritto:


    Il problema è che devo trovare un alternativa alla classe "ByteArrayOutputStream"
    Con cosa posso sostituirlo?
    ByteArrayOutputStream è semplicemente una estensione di OutputStream in cui tutti i write scrivono su un array interno invece che su un qualche output "fisico" (es. file, socket, ecc..). Con una particolarità: l'array interno viene ri-allocato automaticamente per aumentare in lunghezza man mano che vengono inseriti byte.
    Grazie per la risposta velocissima intanto. Si, guardando la documentazione ho visto appunto che è un extend della classe OutputStream, quindi avevo pensato che magari tra le altre estensioni qualcuna poteva fare al caso mio. Ma tutto quello che ho provato non funziona. In pratica la comodità di quella classe è che permette, come hai detto tu, di creare un array su cui scrivere...il problema è che se non la uso e l'array lo creo semplicemente scrivendo "byte[] nome array", poi non posso passarlo al costruttore di DatagramOutputStream...non c'è nient'altro che mi permetta di scrivere su file un array di byte ricevuto dal server? Mi sono accorto ora che ho dimenticato di specificarlo nel primo messaggio..ma l obiettivo sarebbe quello di collegarsi a un server(scaricato da internet per il momento) e scaricare un file che si trova al suo interno..salvandolo sul disco.
  • Re: Variante di ByteArrayOutputStream

    Scrivitela da TE un'implementazione della classe che vuoi rimpiazzare.
    Il prof non ha spiegato il funzionamento della classe nella LIBRERIA STANDARD, ma se ti implementi una TUA versione, nessuno puo' dire nulla
Devi accedere o registrarti per scrivere nel forum
3 risposte