/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
PrintWriter fra System.out, men hvordan?
Fra : Niels Tolstrup


Dato : 11-11-03 10:58

Hej,

Jeg vil gerne lave en PrintWriter ud fra System.out,
jeg har skrevet nedenstående kode til formålet. Det kompilerer
fint, men jeg for intet på skærmen fra PrintWriter, hvad gør jeg
forkert.

import java.io.*;

class Test{
public static void main( String[] args){
PrintStream ps = System.out;
PrintWriter pw = new PrintWriter( ps);
pw.println( "Hello from PrintWriter");
ps.println( "Hello from PrintStream");
}
}

Venlig hilsen

Niels

 
 
Martin Moller Peders~ (11-11-2003)
Kommentar
Fra : Martin Moller Peders~


Dato : 11-11-03 11:22

In <3fb0b18f$0$69976$edfadb0f@dread12.news.tele.dk> Niels Tolstrup <nt@nowhere.invalid> writes:

>Hej,

>Jeg vil gerne lave en PrintWriter ud fra System.out,
>jeg har skrevet nedenstående kode til formålet. Det kompilerer
>fint, men jeg for intet på skærmen fra PrintWriter, hvad gør jeg
>forkert.

Proev at flush stream'en.

Mvh
Martin

Niels Tolstrup (11-11-2003)
Kommentar
Fra : Niels Tolstrup


Dato : 11-11-03 11:56

Hej Martin,

Tusind tak for hjælpen.
>
> Proev at flush stream'en.
>
Jeg tilføjede

pw.flush();

og nu virker det,
men jeg forstår ikke hvorfor systemet ikke selv flusher alle streams inden
exit, sådan plejer det at være i de andre sprog jeg benytter, er det en
særlig java feature?

venlig hilsen

Niels

Martin Moller Peders~ (11-11-2003)
Kommentar
Fra : Martin Moller Peders~


Dato : 11-11-03 13:13

In <3fb0bf3a$0$69987$edfadb0f@dread12.news.tele.dk> Niels Tolstrup <nt@nowhere.invalid> writes:

>Hej Martin,

>Tusind tak for hjælpen.
>>
>> Proev at flush stream'en.
>>
>Jeg tilføjede

>pw.flush();

>og nu virker det,
> men jeg forstår ikke hvorfor systemet ikke selv flusher alle streams inden
>exit, sådan plejer det at være i de andre sprog jeg benytter, er det en
>særlig java feature?

Nej, det kommer an på operativ-systemet.

Mvh
Martin

Jacob Bunk Nielsen (12-11-2003)
Kommentar
Fra : Jacob Bunk Nielsen


Dato : 12-11-03 12:49

tusk@daimi.au.dk (Martin Moller Pedersen) writes:
> Niels Tolstrup <nt@nowhere.invalid> writes:
>
>>og nu virker det, men jeg forstår ikke hvorfor systemet ikke selv
>>flusher alle streams inden exit, sådan plejer det at være i de andre
>>sprog jeg benytter, er det en særlig java feature?
>
> Nej, det kommer an på operativ-systemet.

Burde PrintWriter ikke have en finalize() der flusher når programmet
afsluttes?

--
Jacob

Martin Moller Peders~ (12-11-2003)
Kommentar
Fra : Martin Moller Peders~


Dato : 12-11-03 13:23

In <spamdrop+7tfzgt24dz.fsf@armstrong.exiqon.com> Jacob Bunk Nielsen <spam@bunk.cc> writes:

>tusk@daimi.au.dk (Martin Moller Pedersen) writes:
>> Niels Tolstrup <nt@nowhere.invalid> writes:
>>
>>>og nu virker det, men jeg forstår ikke hvorfor systemet ikke selv
>>>flusher alle streams inden exit, sådan plejer det at være i de andre
>>>sprog jeg benytter, er det en særlig java feature?
>>
>> Nej, det kommer an på operativ-systemet.

>Burde PrintWriter ikke have en finalize() der flusher når programmet
>afsluttes?

Finalize bliver ikke koert ved at programmet afsluttes. Det er
ihvertfald ikke garanteret af java-standarden.

-Martin

kgc (13-11-2003)
Kommentar
Fra : kgc


Dato : 13-11-03 19:28

>>> og nu virker det, men jeg forstår ikke hvorfor systemet ikke selv
>>> flusher alle streams inden exit, sådan plejer det at være i de
>>> andre sprog jeg benytter, er det en særlig java feature?
>>
>> Nej, det kommer an på operativ-systemet.
Eller måske nærmere JVM'en??

> Burde PrintWriter ikke have en finalize() der flusher når programmet
> afsluttes?
PrintWriter har en close-metode der flusher - så husk at lukke din
stream før du afslutter dit program. Skal man ikke også lukke filer
efter sig i de systemer du plejer at benytte? Man kan selvfølgelig have
en driver der holder filen logisk lukket (dvs. flusher efter hver
skrivning), så vidt jeg kan se af API'en så gør PrintWriter dette
(flusher dog kun efter hver linie), hvis du sætter autoFlush (kan sættes
i din konstruktør).

finalize() kaldes kun ved garbage collection, og der er ingen garantier
for om og hvornår garbage collectoren kører.

Mvh. Kasper


Jacob Bunk Nielsen (13-11-2003)
Kommentar
Fra : Jacob Bunk Nielsen


Dato : 13-11-03 19:37

kgc <nospam1@webspeed.dk> writes:

>>> Nej, det kommer an på operativ-systemet.
> Eller måske nærmere JVM'en??

Både Niels og jeg bruger Suns JDK 1.4.2 på Linux og Solaris.

> PrintWriter har en close-metode der flusher - så husk at lukke din
> stream før du afslutter dit program. Skal man ikke også lukke filer
> efter sig i de systemer du plejer at benytte?

Jo, men fx lukker man da aldrig stdout i sine C-programmer. Det lader
man da systemet klare. Ganske som man i Java heller ikke lukker
System.out før man afslutter sine programmer.

> Man kan selvfølgelig have en driver der holder filen logisk lukket
> (dvs. flusher efter hver skrivning), så vidt jeg kan se af API'en så
> gør PrintWriter dette (flusher dog kun efter hver linie), hvis du
> sætter autoFlush (kan sættes i din konstruktør).

Tak - jeg havde af en eller anden årsag overset autoFlush. Mon ikke
den nogenlunde løser problemet?

> finalize() kaldes kun ved garbage collection, og der er ingen
> garantier for om og hvornår garbage collectoren kører.

Min fejl at jeg satte navn på noget forkert

Jeg tænkte bare på om der ikke var noget der flushede før programmet
blev afsluttet. Jeg må indrømme at jeg alt andet lige synes det er
defekt at der ikke bliver flushet når mit program afslutter.

--
Jacob - www.bunk.cc
A clever prophet makes sure of the event first.

kgc (13-11-2003)
Kommentar
Fra : kgc


Dato : 13-11-03 19:49

> Jeg tænkte bare på om der ikke var noget der flushede før programmet
> blev afsluttet. Jeg må indrømme at jeg alt andet lige synes det er
> defekt at der ikke bliver flushet når mit program afslutter.
Tja, det ville i hvert fald være rart, hvis der automatisk blev flushet.
Jeg kan ikke lige gennemskue, om det er fordi det koster for mange
ressourcer at skulle holde øje med alle streams brugeren åbner (for det
må vel påhvile jvm'en, hvis ikke brugeren selv kan forventes at kalde
flush), og om det hele måske kommer ned til at man i sprog uden
garbage-collection har en destructor der kan sørge for at flushe,
hvorimod denne mulighed ikke er til stede i java. Som du selv skriver,
så bliver system-streams flushet, så man kan måske slutte at de
"system-oprettede" streams automatisk flushes, mens brugeren selv må
tage vare på de streams han selv opretter.

Jeg ved godt du faktisk skriver til System.out, men det "ved" JVM'en jo
sådan set ikke, før den PrintWriter du har pakket uden om, skriver data
videre (dvs. flusher).

Bare af nysgerrighed: Bliver "bruger-oprettede" streams automatisk
flushet i f.eks. C eller andre sprog?

Mvh. Kasper


Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408921
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste