Avatar billede jespersahner Nybegynder
18. november 2006 - 10:25 Der er 23 kommentarer og
1 løsning

Læse binær fil ind i array

Dette er i forlængelse af et tidligere spm. omkring læsning af binære filer i JavaScript, se: http://www.eksperten.dk/spm/548514. Her bruges en funktion:
function binaryRead(path) {
    var stream, binaryStream;
   
    stream = new ActiveXObject("ADODB.Stream");
    stream.Type = 1;
    stream.Open();
        stream.LoadFromFile(path);
        binaryStream = stream.Read();
    stream.close();
   
    return binaryStream;
}

Mit spm. er nu: Hvordan bruger jeg denne funktion til at gennemlæse en binær fil byte for byte og gemme indholdet i en array?

Er der i øvrigt noget med, at ADODB.Stream ikke længere virker i nyere udgaver af IE pga. sikkerhedsproblemer, og hvad gør man så i stedet?
Avatar billede roenving Novice
20. november 2006 - 02:43 #1
Tjah, det virker vel egentlig meget godt, man skal bare først fjerne blokeringen (den gule bjælke øverst i browservinduet), og så acceptere at ens computer bliver udsat for et ondsindet angreb (såvidt jeg husker, for heller ikke jeg ville nogensinde acceptere den slags, endda så jeg ikke engang finder på at teste det !-)

-- i øvrigt returnerer ovenstående vel bare hele filen, og så kan du vel bare læse den tegn for tegn og så parse den der, hvor du har brug for det ?-)
Avatar billede jespersahner Nybegynder
20. november 2006 - 02:50 #2
->roenving: Ja og ja. Mht. til det sidste har jeg egentlig bare brug for den relvante kode i forhold til at læse den tegn for tegn.
Avatar billede olebole Juniormester
20. november 2006 - 14:54 #3
<ole>

ADODB må ikke kunne bruges i en browser over nettet - og det har MS heldigvis endelig fundet udaf - så den kan du kun bruge lokalt. Du har ikke - indenfor alm. webteknologier - mulighed for at skrive/læse/behandle indholdet af binære filer  :)

/mvh
</bole>
Avatar billede jespersahner Nybegynder
20. november 2006 - 15:45 #4
->olebole: Nej, det har man nok ikke.

Hvad mener du om flg. tankegang: I stedet for at læse fra en binær fil, gemmes data i et BLOB-objekt i en database. Man læser så i stedet bare dette objekt ved et database-opslag.
Avatar billede olebole Juniormester
20. november 2006 - 15:53 #5
Jeg har ingen idé om, hvad du skal bruge det til - så det kan jeg ikke have nogen begavet mening om  :)
Avatar billede jespersahner Nybegynder
20. november 2006 - 16:20 #6
->olebole: Det er egentlig bare en masse tal, som skal viderebehandles i en grafisk præsentation. I den sammenhæng er det ret langsomt at slå alle tallene op i en database, da databaser er dårlige til sekventielle opslag. Ved at lagre al informationen i én record forestiller jeg mig, at det vil gå hurtigt.

Mit spm. til dig går egentlig på, om jeg efterfølgende vil kunne tilgå data fra JavaScript, givet at jeg har læst BLOB-objektet ind - altså hvordan jeg læser de enkelte bytes i BLOB-objektet fra JavaScript.
Avatar billede olebole Juniormester
21. november 2006 - 14:08 #7
- tal ... bytes ... hvad er det præcist, du vil tilgå - og hvordan?
Avatar billede jespersahner Nybegynder
21. november 2006 - 14:21 #8
->olebole: Tal (flydende tal). Men flydende tal kan konverteres til 8 bytes og derved pakkes helt tæt (og det er et helt væsentligt kriterium her). Læsning af flydende tal gemt på denne måde er standard i Java med f.eks. DataInputStream.readDouble(). Heltal fylder kun det halve, nemlig 4 bytes og læses med DataInputStream.readInt().

Jeg ved ikke, om JavaScript direkte understøtter tilsvarende algoritmer til konvertering mellem flydende tal og bytes, men ellers kan man selv kode sig ud af denne del. Det afgørende er, at man kan læse bytes.
Avatar billede arne_v Ekspert
22. november 2006 - 01:16 #9
hvis forskellen på en 4 byte binær integer og samme tal som tekst på f.eks. 9 byte
betyder noget, så tror jeg at JavaScript er det forkerte sprog
Avatar billede roenving Novice
22. november 2006 - 09:39 #10
*lol*
Avatar billede jespersahner Nybegynder
22. november 2006 - 10:05 #11
->arne_v: Problemstillingen er her, at jeg overfører en lidt større mængde data til en Web-applikation. I forhold til brugerens ventetid kan f.eks. 5 sek. i forhold til 2. sek. være afgørende for, om man overhovedet gider vente eller surfer videre. Og så er der selvfølgelig lidt sport i at optimere kode/hastighed :-)
Avatar billede arne_v Ekspert
23. november 2006 - 01:21 #12
hvad er konteksten ?

du har en web side, på den web side sender noget JavaScript en HTTP request
til noget server side kode, den kode returnerer nogle binære floating points,
din JavaScript skal så læse dem og gøre noget ved dem ?

og hvorfor bruger du ikke en Java applet fremfor JavaScript ?
Avatar billede jespersahner Nybegynder
24. november 2006 - 15:46 #13
->arne_v: Konteksten er, at der er tale om en grafisk applikation med en række "punkter" (i størrelsesordenen 50.000-100.000), som skal læses ind fra en server, idet "punkterne" løbende ændres.

Og ja, det er præcis rigtigt, at min Web-applikation skal kunne læse informationen ind, så JavaScript kan viderebehandle den.

Helt i tråd med hvordan du tænker har jeg lavet en Java-applet, som læser informationen ind og "deler den" med JavaScript. Det virker fint. I øvrigt viser det sig, at indlæsning fra en binær fil (med flydende tal lagret som 8 bytes) foregår ca. 5-10 gange hurtigere (!) end opslag i en (MySQL-)database. Pointen er selvfølgelig, at databaser er dårlige til sekventiel læsning, men i forhold til svartider på en Web er disse tidsforskelle helt afgørende i forhold til bruger-oplevelsen.

Så langt så godt. De folk jeg arbejder sammen med her er lidt interesseret i, om det samme kan lade sig gøre fra en hel tynd klient, altså en klient uden en Java plug-in. Jeg er derfor interesseret i at finde ud af, om JavaScript kan foretage den samme indlæsning fra en binær fil, mens opslag i en database fra JavaScript som en klient-løsning nok ikke er muligt (alternativt kan man bruge PHP som server-løsning).
Avatar billede arne_v Ekspert
24. november 2006 - 23:20 #14
hvorfor ikke lave det grafiske server side og så kun hente det færdige grafik
(enten med statisk IMG tag eller med noget dynamisk JavaScript) ?
Avatar billede jespersahner Nybegynder
25. november 2006 - 00:17 #15
->arne_v: Du har en pointe, som jeg også har overvejet, men fraveget af flg. grunde:
1. Den færdige grafik ville fylde langt mere end den information jeg læser ind med lang svartid til følge.
2. Informationen, der læses ind, skal kunne bruges uafhængigt af den rene grafiske præsentation til bla. sortering af oplysninger, filtrering osv. Hvad tænker du konkret på, når du skriver "dynamisk JavaScript"? (moderne web-udvikling sker efterhånden så hurtigt med Ajax osv., at man næsten burde lave gratis-aviser over emnet :-))
Avatar billede jespersahner Nybegynder
16. december 2006 - 21:59 #16
Jeg vil gerne have lukket dette spm. Smid gerne et svar en af jer.
Avatar billede jespersahner Nybegynder
06. februar 2007 - 15:59 #17
Er der en af jer, der smider et svar?
Avatar billede arne_v Ekspert
07. februar 2007 - 01:39 #18
roenving og olebole er vel dem som har svaret på dit egentlige spørgsmål
Avatar billede jespersahner Nybegynder
25. april 2007 - 23:30 #19
Smid gerne et svar en af jer.
Avatar billede olebole Juniormester
26. april 2007 - 12:37 #20
Vi kan dele, hvis vi begge lægger et svar  =)

Faktisk bliver der udgivet masser af 'gratis aviser' om webkodning/-teknologier (web-tutorials og -artikler) - men ligesom med rigtige gratis aviser er deres baggrund langtfra altid særlig troværdig.

AJAX kunne være en mulig løsning i dit tilfælde  ;o)
Avatar billede roenving Novice
27. april 2007 - 10:55 #21
Velbekomme, men jeg var så lige en tur i Tjekkiet, så jeg ikke så det ...

-- men det er helt i orden, at ole scorer pointene !-)
Avatar billede olebole Juniormester
27. april 2007 - 14:02 #22
Tjekkiet ... så har du nok også selv fået skummet en hel del ...!  ;oD

Tak for points ... til Jer begge  ;o)
Avatar billede roenving Novice
27. april 2007 - 14:18 #23
-- det har zq ladet pivo'erne om !-)
Avatar billede olebole Juniormester
27. april 2007 - 15:08 #24
Sådan er det i vores alder, Jes ... det er kun pilsnerne, der skummer - og selv scorer man kun points ... hrmpff!  :D
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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