Pages: [1]   Go Down
Print
Author Topic: inserimento da console  (Read 1443 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
Gpeppe69
Apprendista Forumista
**
Offline Offline

Posts: 294



« on: 28-03-2012, 15:28:18 »

Salve ragazzi scusate ma vorrei chiarirmi un pò di cose sugli Stream

quello che mi fa impazzire è il concetto, nel senso che per lettura e scrittura su Stream  si intende, per lettura inserire qualsiasi tipo di valore da tastiera  ? e per scrittura stampa a video ? se è no allora spiegatemi a cosa servono la lettura e la scrittura. grazie   
Logged
Carghaez
Matricola
*
Offline Offline

Gender: Male
Posts: 40


"Love is 0."


« Reply #1 on: 28-03-2012, 16:39:42 »

Salve ragazzi scusate ma vorrei chiarirmi un pò di cose sugli Stream

quello che mi fa impazzire è il concetto, nel senso che per lettura e scrittura su Stream  si intende, per lettura inserire qualsiasi tipo di valore da tastiera  ? e per scrittura stampa a video ? se è no allora spiegatemi a cosa servono la lettura e la scrittura. grazie   

Partiamo dal presupposto che, da ciò che hai scritto, non hai ben chiaro l'idea di STREAM e di lettura e scrittura.
Stream è un flusso, nel caso informatico è un flusso di dati, da una sorgente ad una destinazione.
E' possibile gestire un flusso di dati da una sorgente(BUFFER DI TASTIERA o FILE) ad una destinazione(ALLOCAZIONE DI MEMORIA) e questo è lo stream di input.
E' "altresì" possibile gestire un flusso di dati da una sorgente(ALLOCAZIONE DI MEMORIA) ad una destinazione(CONSOLE VIDEO o FILE) e questo è lo stream di output.
.poverotu

....
Analizziamo quello che hai scritto tu:
quello che mi fa impazzire è il concetto(e te l'ho spiegato), nel senso che per lettura e scrittura su Stream  si intende(Non si legge e si scrive su Stream.)
per lettura inserire qualsiasi tipo di valore da tastiera? (Così,se leggi,leggi il buffer della tastiera...)
e per scrittura stampa a video? ("stampi" dove vuoi...Ma non si scrive su uno Stream!)
se è no allora spiegatemi a cosa servono la lettura e la scrittura. grazie   
Lettura e Scrittura... de che?

Logged

"non posto per risparmiare spazio sui server del DMI"
{cit.}
Gpeppe69
Apprendista Forumista
**
Offline Offline

Posts: 294



« Reply #2 on: 28-03-2012, 16:59:19 »

non ho capito quello che hai scritto comunque quello che voglio sapere , se con gli stream si inserisce da console qualsiasi tipo di dato. e per stampare Huh?Huh?

ad esempio questo deve inserire un input da tastiera ma perchè non stampa il valore che inserisco ?
Code:
public class pippo2 {

public static void main(String[] args) throws IOException{

        DataInputStream in = new DataInputStream((System.in));

int i = 0;


System.out.println("inserisci i");
i=in.readInt();

System.out.print(i);
     in.close();

}

}
Logged
ɹǝǝuıƃuǝsɹǝʌǝɹ
Administrator
God of the Forum
*****
Offline Offline

Gender: Male
Posts: 4.474


Più grande è la lotta, e più è glorioso il trionfo


WWW
« Reply #3 on: 29-03-2012, 00:12:09 »

Allora, diciamo che non c'è bisogno di essere così "rigidi" quando si risponde. Probabilmente Gpeppe69 ha solo dubbi legittimi da chiarire .

Entrando nel merito, la "lettura" e la "scrittura" sono concetti radicati negli stream, quindi il suo dubbio non solo è legittimo, ma merita una risposta chiara.
Considera, ad esempio, la classe java.io.OutputStream ha il sui opportuni metodi write (ben tre, due implementati e uno astratto implementato nelle figlie), oppure la classe java.io.InputStream, che espone i suoi opportuni metodi read; quindi i concetti di "lettura" e "scrittura" hanno senso .

Li puoi vedere anche in un'ottica di trasferimento dati, come dicevi tu inizialmente, però nel fatto che il tuo programma è "il centro" in cui terminano gli stream di lettura e da cui partono gli stream di scrittura.
L'esempio che hai fatto tu, in cui una delle estremità è la "ALLOCAZIONE IN MEMORIA", è veramente solo un esempio, e non è esaustivo nono. Potrei, infatti, fare una operazione del tipo:
Code:
mioStreamOut.write (mioStreamIn.read ())
in cui, come vedi, non faccio quella "allocazione" da nessuna parte ed uso appunto i metodi (cioè i concetti) di lettura e scrittura (e non di "stampa").

Inoltre, mi pare di capire che al posto di "scrittura" (espressione usata da Gpeppe69), contro cui tu ti sei schierato nel tuo messaggio, tu abbia usato invece il termine "stampa", perché probabilmente hai fatto riferimento mentale a metodi del tipo "print/println", che però sono esposti solo da (sottoclassi di) java.io.PrintStream, quindi non sono generalizzabili .

Una buona nottata .
Logged

La grande marcia della distruzione mentale proseguirà. Tutto verrà negato. Tutto diventerà un credo. È un atteggiamento ragionevole negare l'esistenza delle pietre sulla strada; sarà un dogma religioso affermarla. È una tesi razionale pensare di vivere tutti in un sogno; sarà un esempio di saggezza mistica affermare che siamo tutti svegli. Accenderemo fuochi per testimoniare che due più due fa quattro. Sguaineremo spade per dimostrare che le foglie sono verdi in estate. Non ci resterà quindi che difendere non solo le incredibili virtù e saggezze della vita umana, ma qualcosa di ancora più incredibile: questo immenso, impossibile universo che ci guarda dritto negli occhi. Combatteremo per i prodigi visibili come se fossero invisibili. Guarderemo l'erba e i cieli impossibili con uno strano coraggio. Saremo tra coloro che hanno visto eppure hanno creduto.

In tutto, amare e servire.

  
                            ن                           
I can deal with ads,
I can deal with buffer,
but when ads buffer
I suffer...

...nutrimi, o Signore, "con il pane delle lacrime; dammi, nelle lacrime, copiosa bevanda...

   YouTube 9GAG    anobii  S  Steam T.B.o.I. Wiki [univ] Lezioni private  ʼ  Albo d'Ateneo Unicode 3.0.1
Usa "Search" prima di aprire un post - Scrivi sempre nella sezione giusta - Non spammare - Rispetta gli altri utenti - E ricorda di seguire il Regolamento
Carghaez
Matricola
*
Offline Offline

Gender: Male
Posts: 40


"Love is 0."


« Reply #4 on: 30-03-2012, 19:01:11 »


Inoltre, mi pare di capire che al posto di "scrittura" (espressione usata da Gpeppe69), contro cui tu ti sei schierato nel tuo messaggio, tu abbia usato invece il termine "stampa", perché probabilmente hai fatto riferimento mentale a metodi del tipo "print/println", che però sono esposti solo da (sottoclassi di) java.io.PrintStream, quindi non sono generalizzabili .


Se il soggetto del messaggio sono io, ti consiglierei di non scrivere più la notte che la lucidità gioca brutti scherzi   boh (causando fraintendimenti, tra l'altro)
Se fai un search veloce di stampa nel mio messaggio, noterai che io ho scritto 'stampa' solo una volta e se l'ho scritto, è stato per rispondere a Gpeppe che chiedeva se per scrittura si intendesse 'stampare' a video
Quote
Gpeppe scrive: e per scrittura stampa a video?
Carghaez risponde: ("stampi" dove vuoi...Ma non si scrive su uno Stream!)

Da ciò, non comprendo come tu abbia capito che io mi riferissi a 'stampare' quando ho sempre ripetuto che si scrive  boh

Se poi vogliamo parlare de "L'allocazione in memoria" che sfrutta lo stream, dall'istruzione da te scritta:
mioStreamOut.write (mioStreamIn.read ())
Puoi vederla come vuoi, ma codice macchina parlando stai allocando dei dati in un $buffer_a_caso. Che poi questo sia un registro di memoria O un'allocazione di memoria ben definita da un oggetto o un tipo primitivo non ha importanza, infatti non ho specificato e non mi sono perso nei dettagli per evitare più confusione di quella che già il nostro collega potesse avere Smiley.

Quote
Entrando nel merito, la "lettura" e la "scrittura" sono concetti radicati negli stream, quindi il suo dubbio non solo è legittimo, ma merita una risposta chiara.
Lo sono di sicuro, noi sfruttiamo gli stream(che fanno da tramite) proprio per effettuare operazioni quali lettura/scrittura.

Per entrare più nel dettaglio ed evitare ulteriore fraintendimenti:

Rettifico le mie definizione in queste, più esaustive:

E' possibile gestire un flusso di dati da una sorgente(Esempio: BUFFER DI TASTIERA o FILE) ad una destinazione(Esempio: ALLOCAZIONE DI MEMORIA) e questo possiamo farlo attraverso uno stream di input che ci permetterà di leggere i dati dalla sorgente attraverso il suo metodo read.

E' "altresì" possibile gestire un flusso di dati da una sorgente(Esempio: ALLOCAZIONE DI MEMORIA) ad una destinazione(Esempio: CONSOLE VIDEO o FILE) e questo possiamo farlo attraverso uno stream di output che ci permetterà di scrivere i dati sulla destinazione attraverso il suo metodo write.

IMHO Più chiaro di così non so come spiegarlo...
Logged

"non posto per risparmiare spazio sui server del DMI"
{cit.}
ɹǝǝuıƃuǝsɹǝʌǝɹ
Administrator
God of the Forum
*****
Offline Offline

Gender: Male
Posts: 4.474


Più grande è la lotta, e più è glorioso il trionfo


WWW
« Reply #5 on: 30-03-2012, 22:53:21 »

Se il soggetto del messaggio sono io, ti consiglierei di non scrivere più la notte che la lucidità gioca brutti scherzi   boh (causando fraintendimenti, tra l'altro)
Se fai un search veloce di stampa nel mio messaggio, noterai che io ho scritto 'stampa' solo una volta e se l'ho scritto, è stato per rispondere a Gpeppe che chiedeva se per scrittura si intendesse 'stampare' a video
Quote
Gpeppe scrive: e per scrittura stampa a video?
Carghaez risponde: ("stampi" dove vuoi...Ma non si scrive su uno Stream!)

Da ciò, non comprendo come tu abbia capito che io mi riferissi a 'stampare' quando ho sempre ripetuto che si scrive  boh
Sì, il soggetto, anzi il destinatario, sei tu.
Confronta le due parti di messaggi che tu stesso hai riscritto e che io ho evidenziato in rosso, così capisci che quello che tu chiami fraintendimento, se è successo, non è causato da chi legge il messaggio .

Il fraintendimento è possibile, per carità, ma devi ammettere che i tuoi messaggi sono stati piuttosto chiari .
A ulteriore conferma di ciò che dico :
(Non si legge e si scrive su Stream.)
[...]
("stampi" dove vuoi...Ma non si scrive su uno Stream!)
[...]
Lettura e Scrittura... de che?
Ma lasciamo stare, l'importante è che l'utente Gpeppe69 abbia compreso i concetti risolvendo i suoi dubbi  univ!

Riguardo al consiglio che mi dai, preferisco declinarlo, ma apprezzo la buona intenzione .

Eventualmente aspettiamo che sia lui (o qualsivoglia altro membro imparziale del forum) a spiegare se nei nostri rispettivi messaggi ci sono state inesattezze, o chi è stato più o meno chiaro, o fraintendibile.

Auguri di una buona notte .
Logged

La grande marcia della distruzione mentale proseguirà. Tutto verrà negato. Tutto diventerà un credo. È un atteggiamento ragionevole negare l'esistenza delle pietre sulla strada; sarà un dogma religioso affermarla. È una tesi razionale pensare di vivere tutti in un sogno; sarà un esempio di saggezza mistica affermare che siamo tutti svegli. Accenderemo fuochi per testimoniare che due più due fa quattro. Sguaineremo spade per dimostrare che le foglie sono verdi in estate. Non ci resterà quindi che difendere non solo le incredibili virtù e saggezze della vita umana, ma qualcosa di ancora più incredibile: questo immenso, impossibile universo che ci guarda dritto negli occhi. Combatteremo per i prodigi visibili come se fossero invisibili. Guarderemo l'erba e i cieli impossibili con uno strano coraggio. Saremo tra coloro che hanno visto eppure hanno creduto.

In tutto, amare e servire.

  
                            ن                           
I can deal with ads,
I can deal with buffer,
but when ads buffer
I suffer...

...nutrimi, o Signore, "con il pane delle lacrime; dammi, nelle lacrime, copiosa bevanda...

   YouTube 9GAG    anobii  S  Steam T.B.o.I. Wiki [univ] Lezioni private  ʼ  Albo d'Ateneo Unicode 3.0.1
Usa "Search" prima di aprire un post - Scrivi sempre nella sezione giusta - Non spammare - Rispetta gli altri utenti - E ricorda di seguire il Regolamento
Carghaez
Matricola
*
Offline Offline

Gender: Male
Posts: 40


"Love is 0."


« Reply #6 on: 30-03-2012, 23:11:54 »



Boh... manco stessimo a parlar "D'aria fritta"  boh.
Se quello che volevi intendere è che si legge e si scrive su uno stream allora è vero, abbiamo due idee differenti e due punti di vista differenti. IMHO Io ho sempre pensato che non si scrive su stream o leggi lo stream ma scrivi sulla destinazione dello stream e leggi dalla sorgente dello stream (che di fatto, sono due cose assolutamente differenti)

Lo stream è uno strumento, uno strumento utilizzato per permettere la trasmissione di dati da sorgente a destinazione. Che poi il metodo write e read appartengono allo stream è un dato di fatto, ma dire che si scrive sullo stream invece che sulla sua destinazione è un po come parlar "D'aria fritta".
 
E' un dettaglio, se vuoi intenderla così, ma è un dettaglio abbastanza rilevante ai fini della comprensione.
Ciò non toglie che potrei anche sbagliarmi e che in realtà tutto ciò è mia invenzione e non esiste una destinazione e lo stream è tutt'altra cosa. Ma se ciò non fosse esatto allora vorrei anch'io dei chiarimenti in merito   
Logged

"non posto per risparmiare spazio sui server del DMI"
{cit.}
Eleirgab
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 344


Apprezzatemi ora. Eviterete la fila


WWW
« Reply #7 on: 31-03-2012, 00:06:31 »


Lo stream è uno strumento, uno strumento utilizzato per permettere la trasmissione di dati da sorgente a destinazione. Che poi il metodo write e read appartengono allo stream è un dato di fatto, ma dire che si scrive sullo stream invece che sulla sua destinazione è un po come parlar "D'aria fritta".


Io non credo sia sbagliato affermare che si possa scrivere sullo Stream.
Rapido esempio: OutputStream possiede il metodo write() che non scrive per forza sulla destinazione, ma può salvare il contenuto in un buffer temporaneo, tanto è vero che si può ricorrere al metodo flush() per stare "sicuri".
In tal caso stai effettivamente scrivendo sullo Stream. Poi possiamo fare ore e ore di dotta filosofia sul concetto che lo Stream non esiste ed è solo un'astrazione quindi bla bla bla, ma alla fin fine tale astrazione serve proprio a evitare di stare troppo a riflettere su questi dettagli.
« Last Edit: 31-03-2012, 01:48:08 by Eleirgab » Logged

Collettivo SDAI

-----BEGIN GEEK CODE BLOCK-----
Version: 3.1
GIT d-- s+:+ a-- C++ UL++ P L+++ E- W+++>$ N? o? K- w-- O? M V? PS++ PE- Y+ PGP- t 5? X+ R>+ tv-- b++ DI+++ D- G e h! r y+
------END GEEK CODE BLOCK-----
Carghaez
Matricola
*
Offline Offline

Gender: Male
Posts: 40


"Love is 0."


« Reply #8 on: 31-03-2012, 00:13:46 »


Lo stream è uno strumento, uno strumento utilizzato per permettere la trasmissione di dati da sorgente a destinazione. Che poi il metodo write e read appartengono allo stream è un dato di fatto, ma dire che si scrive sullo stream invece che sulla sua destinazione è un po come parlar "D'aria fritta".


Io non credo sia sbagliato affermare che si possa scrivere sullo Stream.
Rapido esempio: OutputStream possiede il metodo write() che non scrive per forza sulla destinazione, ma può salvare il contenuto in un buffer temporaneo, tanto è vero che si può ricorrere al metodo flush() per stare "sicuri".
In tal caso stai effettivamente scrivendo sullo Stream. Poi possiamo fare ore e ore di dotta filosofia sul concetto che lo Stream non esiste ed è solo un'astrazione quindi bla bla bla, ma alla fin fine tale astrazione serve proprio a evitare di stare troppo a riflettere su questi dettagli.
Starai sempre scrivendo su un $buffer_a_caso e non sullo stream, proprio perchè come da te affermato, non possiamo scrivere su un qualcosa che di per se è 'astratto' 
Logged

"non posto per risparmiare spazio sui server del DMI"
{cit.}
Eleirgab
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 344


Apprezzatemi ora. Eviterete la fila


WWW
« Reply #9 on: 31-03-2012, 01:54:35 »

non possiamo scrivere su un qualcosa che di per se è 'astratto'  

No. Astratto e Astrazione sono due concetti diversi.
Il primo indica qualcosa che non si può toccare, il secondo è un approccio "dall'alto" in cui si tralasciano i dettagli.
Del resto il programmatore interagisce con le API dello stream, non con quelle della destinazione, quindi scrive sullo stream, poi sarà lo stream a scrivere sulla destinazione.

Fra l'altro non è detto che il $buffer_a_caso faccia parte della destinazione.
Logged

Collettivo SDAI

-----BEGIN GEEK CODE BLOCK-----
Version: 3.1
GIT d-- s+:+ a-- C++ UL++ P L+++ E- W+++>$ N? o? K- w-- O? M V? PS++ PE- Y+ PGP- t 5? X+ R>+ tv-- b++ DI+++ D- G e h! r y+
------END GEEK CODE BLOCK-----
XDnl
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 376



« Reply #10 on: 31-03-2012, 14:22:40 »

Ma lasciamo stare, l'importante è che l'utente Gpeppe69 abbia compreso i concetti risolvendo i suoi dubbi  univ!
Da "fonte esterna" mi sa di no, visto che nessuno ha risposto alla sua domanda originale  I

non ho capito quello che hai scritto comunque quello che voglio sapere , se con gli stream si inserisce da console qualsiasi tipo di dato. e per stampare Huh?Huh?

ad esempio questo deve inserire un input da tastiera ma perchè non stampa il valore che inserisco ?

E' dovuto al fatto che la classe DataInputStream non si comporta come ti aspetteresti.
Prima però una soluzione funzionante al problema:
Code:
import java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class pippo2
{
public static void main(String[] args) throws IOException
{
int i = 0;
                
                // InputStreamReader è la classe che ti serve.
                // BufferedReader si usa per ottimizzare, ma non è strettamente necessaria.
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

System.out.println("Inserisci i");
              
                // Il readLine() ti ritorna una stringa, che poi converti in un intero col metodo parseInt()
i = Integer.parseInt(in.readLine());

System.out.println(i);
in.close();
    }
}

In pratica devi usare la classe InputStreamReader.
Di seguito invece il perchè la classe DataInputStream dà letteralmente i numeri.  yoh
Questa classe tratta lo stream come un flusso di byte, assemblandoli in tipi primitivi di Java.
Mi spiego meglio.
In Java un intero è a 32 bit.
Quando invochi il metodo readInt(), vengono "consumati" 4 byte dallo stream.
Ora, lanciando il programma e battendo il tasto 'A', "inseriamo" un byte nello stream (per la precisione, il carattere 'A' maiuscolo vale 65, ossia 01000001 in binario).
In output abbiamo:
Code:
A
Un solo byte non basta per la readInt() che ne vuole 4, dunque bisogna battere altre 3 volte il tasto 'A'
Code:
AAAA
A questo punto nello stream abbiamo inserito 4 byte (ossia 4 'A') e quindi la readInt() "assembla" tali byte in un intero a 32 bit e ritorna.
L'assemblaggio è semplice (più dettagli qui): dopo aver inserito le 4 'A', lo stream in binario si presenta come segue:
Code:
01000001 | 01000001 | 01000001 | 01000001
byte 0             byte 1        byte 2            byte 3

La readInt() estrae i 4 byte dallo stream e li assembla in un unica stringa a 32 bit, così:

Code:
01000001010000010100000101000001
Questa stringa a 32 bit viene assegnata ad un int, che in decimale vale (puoi verificarlo facilmente con la Calcolatrice di Windows):
Code:
1094795585
che è esattamente il numero "strano" ottenuto in output.  

 
« Last Edit: 31-03-2012, 14:29:37 by XDnl » Logged
Gpeppe69
Apprendista Forumista
**
Offline Offline

Posts: 294



« Reply #11 on: 01-04-2012, 11:33:52 »

diciamo che nessuno ha risposto in modo specifico alla mia domanda, ma comunque grazie tante...   
Logged
Ocelot92
Apprendista Forumista
**
Offline Offline

Posts: 301



« Reply #12 on: 02-04-2012, 15:33:54 »

scrittura può essere a vide come dici tu e la lettura può essere da tastiera. Esistono altri tipo di stream che ti permettono di fare lettura e scrittura da file ad esempio (scrivi su un file - leggi da un file).
Logged

I'm happy to tell you all that...
((λf.λx.f(f(x))) (λy.y^2)) (5)  = 5^4

"Si ma dillo che bisogna cliccare APPLY per crearle le partizioni…" - cit. Utente dopo aver seguito un How-To... .-.
Pages: [1]   Go Up
Print
Jump to: