Avatar billede riversen Nybegynder
03. januar 2007 - 13:55 Der er 8 kommentarer og
1 løsning

Overførsel af flere filer

Hej,

jeg har ikke den store erfaring med fil-overførsel så jeg søger lidt erfaring.

Klienten sender en linie (afsluttet med newline): "FILE <filnavn>"
Og herefter følger filoverførslen. Overførslen fra klienten sker vha. følgende kode. Skrivningen foregår med en BufferedOutputStream, da jeg går ud fra det skal foregå som bytes og ikke chars, da der bl.a. overføres billeder... er det korrekt antaget?

                    byte[] buffer = new byte[8*1024];
                    int read = 0;

                    log( "Sending file " + currentFile.getAbsolutePath() );
                    while( read != -1 )
                    {
                        read = bis.read( buffer, 0, buffer.length );
                        if( read > 0 )
                            write( buffer, 0, read, false );
                    }


Problemet er så at jeg på serveren gerne vil modtage den første linie (som jo er afsluttet med newline). Dette er ikke noget problemet vha. BufferedReader.readLine(). Men når jeg så forsøge at modtage filen vha. en BufferedInputStream (igen fordi jeg går ud fra det skal modtages som bytes) så hænger den i read kaldet. Er det fordi jeg har 2 readers på samme socket.getInputStream() ?

Jeg er lidt blank mht. at finde en "pæn" måde at gøre det ønskede på.
Avatar billede riversen Nybegynder
03. januar 2007 - 13:57 #1
Jeg har nemlig forsøgt at modtage filerne med BufferedReader hvilket fungerer fint, men billederne bliver ikke overført korrekt. Det bliver en masse tilfældige farver istedet.
Avatar billede arne_v Ekspert
03. januar 2007 - 19:17 #2
det giver ofte problemer at blande forskellige former for IO

jeg kan se 2 oplagte muligheder:

1) en socket til control (som skriver/laeser String) og en socket til
  data (som skriver/laeser bytes)

2) du laeser kun bytes og fisker den foerste linie ud manuelt
Avatar billede riversen Nybegynder
03. januar 2007 - 20:41 #3
OK, tak for inputtet. Det er også de 2 løsninger jeg har tænkt på, men ville lige være sikker på, at der ikke var en anden nem løsning...
Avatar billede riversen Nybegynder
03. januar 2007 - 20:42 #4
smid et svar hvis du vil have point
Avatar billede arne_v Ekspert
03. januar 2007 - 20:58 #5
der er ogsaa en tredie mulighed som vil virke fint med *smaa* filer:

wrap en ObjectOutputStream/ObjectInputStream over din OutputStream/InputStream
Avatar billede arne_v Ekspert
03. januar 2007 - 20:58 #6
jo - jeg samler skam
Avatar billede riversen Nybegynder
04. januar 2007 - 06:07 #7
hvorfor kun med små filer ?
Avatar billede arne_v Ekspert
04. januar 2007 - 15:07 #8
jeg antager at du saa vil sende en String og en byte[]

det sidste betyder at hele filen skal vaere i memory i

ikke noget problem med smaa filer

men med DVD images kunne det godt blive et problem
Avatar billede riversen Nybegynder
05. januar 2007 - 06:11 #9
jeg kan jo læse filen ind i små bidder så det skal jeg nok finde ud af
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester