/ 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
Begr=E6nsning af dataoversel
Fra : NB


Dato : 26-05-04 16:29

Jeg har en applet som læser data fra en webserver. Data er et XML-
dokument, som genereres dynamisk når appletten kalder en givet ASP-
script. Mit problem er, at dette XML-dokument fylder omkring =3F megabyte
og derfor tager en del tid at hente for appletten. Dette vil jeg
selvfølgelig gerne optimere, men spørgsmålet er hvordan?

XML-dokumentet består af en del tags og hvis jeg vælger, at konstruere
mit eget dataformat uden tags, så ville data nok fylde omkring 50-100
kilobyte. Jeg vil dog helst, at data forbliver i XML-format, da dette
format ubenægteligt er noget mere forståeligt end et hjemmebrygget
format. Jeg har overvejet at komprimere det data appletten henter og så
lader appletten udpakke det, når den har modtaget det. Jeg har dog ingen
erfaring med dette og vil derfor høre om det kan anbefales? Hvis der er
nogen som har andre forslag, så er jeg meget lydhør :)


 
 
The_MaXx (26-05-2004)
Kommentar
Fra : The_MaXx


Dato : 26-05-04 16:40

> XML-dokumentet består af en del tags og hvis jeg vælger, at konstruere
> mit eget dataformat uden tags, så ville data nok fylde omkring 50-100
> kilobyte. Jeg vil dog helst, at data forbliver i XML-format, da dette
> format ubenægteligt er noget mere forståeligt end et hjemmebrygget
> format. Jeg har overvejet at komprimere det data appletten henter og så
> lader appletten udpakke det, når den har modtaget det. Jeg har dog ingen
> erfaring med dette og vil derfor høre om det kan anbefales? Hvis der er
> nogen som har andre forslag, så er jeg meget lydhør :)
>

Det nemmeste er vel en simpel Huffmann komprimering. Den giver let en
halvt så stor fil (så vidt jeg husker), men har sin svaghed hvis der
bliver brugt mange specielle karakterer.

Hvis der er mange af TAG'sne der går igen vil LZW sikkert være mere
effektiv og den er også temmelig simpel at skrive.

Der er sikker mange andre gode løsninger, men kan huske at de 2 var
ekstremt nemme at implementere dengang jeg prøvede.

Hint: Søg på nettet under LZW så skal du nok finde noget.

The_MaXx

Niels Dybdahl (28-05-2004)
Kommentar
Fra : Niels Dybdahl


Dato : 28-05-04 08:05

> Hint: Søg på nettet under LZW så skal du nok finde noget.

Så vidt jeg husker er LZW stadig patenteret i Europa indtil næste sommer.
Patentet er lige udløbet i USA.

Niels Dybdahl



Martin Moller Peders~ (28-05-2004)
Kommentar
Fra : Martin Moller Peders~


Dato : 28-05-04 11:49

In <40b6e493$0$159$edfadb0f@dtext02.news.tele.dk> "Niels Dybdahl" <ndy@fjern.detteesko-graphics.com> writes:

>> Hint: Søg på nettet under LZW så skal du nok finde noget.

>Så vidt jeg husker er LZW stadig patenteret i Europa indtil næste sommer.

Det patent har aldrig vaeret gyldigt i Danmark og er ogsaa udloebet
i resten af Europa.

http://www.theinquirer.net/?article=15986

/Martin



Niels Dybdahl (01-06-2004)
Kommentar
Fra : Niels Dybdahl


Dato : 01-06-04 10:19

> >> Hint: Søg på nettet under LZW så skal du nok finde noget.
>
> >Så vidt jeg husker er LZW stadig patenteret i Europa indtil næste sommer.
>
> Det patent har aldrig vaeret gyldigt i Danmark og er ogsaa udloebet
> i resten af Europa.
>
> http://www.theinquirer.net/?article=15986

Nederst i artiklen står der at det udløber i Europa om 17 dage.

Niels Dybdahl



Martin Moller Peders~ (01-06-2004)
Kommentar
Fra : Martin Moller Peders~


Dato : 01-06-04 13:33

In <40bc4a01$0$164$edfadb0f@dtext02.news.tele.dk> "Niels Dybdahl" <ndy@fjern.detteesko-graphics.com> writes:

>> >> Hint: Søg på nettet under LZW så skal du nok finde noget.
>>
>> >Så vidt jeg husker er LZW stadig patenteret i Europa indtil næste sommer.
>>
>> Det patent har aldrig vaeret gyldigt i Danmark og er ogsaa udloebet
>> i resten af Europa.
>>
>> http://www.theinquirer.net/?article=15986

>Nederst i artiklen står der at det udløber i Europa om 17 dage.

Men det har aldrig vaeret gyldigt i Danmark og Tyskland.

/Martin




Niels Dybdahl (02-06-2004)
Kommentar
Fra : Niels Dybdahl


Dato : 02-06-04 09:21

> >> >Så vidt jeg husker er LZW stadig patenteret i Europa indtil næste
sommer.
> >>
> >> Det patent har aldrig vaeret gyldigt i Danmark og er ogsaa udloebet
> >> i resten af Europa.
> >>
> >> http://www.theinquirer.net/?article=15986
>
> >Nederst i artiklen står der at det udløber i Europa om 17 dage.
>
> Men det har aldrig vaeret gyldigt i Danmark og Tyskland.

Unisys mener ellers at det er gyldigt i Tyskland:

http://www.unisys.com/about__unisys/lzw/index.htm

Har du noget dokumentation på hvorvidt det er gyldigt i Danmark ?

Niels Dybdahl



Henrik Nielsen (26-05-2004)
Kommentar
Fra : Henrik Nielsen


Dato : 26-05-04 17:26

NB wrote:
> Jeg har en applet som læser data fra en webserver. Data er et XML-
> dokument, som genereres dynamisk når appletten kalder en givet ASP-
> script. Mit problem er, at dette XML-dokument fylder omkring =3F megabyte
> og derfor tager en del tid at hente for appletten. Dette vil jeg
> selvfølgelig gerne optimere, men spørgsmålet er hvordan?


Du pakker bare din OutputStream i din servlet ind i en GZIPOutputStream
og din InputStream i din applet ind i en GZipInputStream.

Så får du gratis foræret gzip-komprimering uden du skal tænke over det.

gzip er god til at pakke xml hvis de samme tags optræder mange gange.
Jeg har tidligere set en komprimeringer med en faktor 5-10 på specielt
velegnede stumper.

/henrik

NB (26-05-2004)
Kommentar
Fra : NB


Dato : 26-05-04 17:50

In article <c92gfj$j2o$1@news.cybercity.dk>, ROERUGIKXGDS@spammotel.com
says...

> Du pakker bare din OutputStream i din servlet ind i en GZIPOutputStream
> og din InputStream i din applet ind i en GZipInputStream.

Lyder spændende, men nu bruger jeg ikke servlets. Mit setup er som
følgende:

DLL <-> ASP <-> Applet

Applet kalder ASP-scriptet, fx http://myserver.dk/myscript.asp?arg=1
&arg=2

ASP-scriptet sørger herefter for oprette og kalde DLL'en med passende
parametre hvorefter DLL'en spytter XML ud vha. af Response.Write (ASP-
objekt som det har adgang til).

DLL'en er udviklet i Delphi, så min komprimeringsrutine skal gerne være
ind der kan implementeres i både Delphi og Java. Jeg har selv en smule
erfaringer med ZLib ifbm. Delphi, men ikke med Java.

Soren (Home) (26-05-2004)
Kommentar
Fra : Soren (Home)


Dato : 26-05-04 19:54

NB <nej@tak.dk> writes:

> In article <c92gfj$j2o$1@news.cybercity.dk>, ROERUGIKXGDS@spammotel.com
> says...
>
> > Du pakker bare din OutputStream i din servlet ind i en GZIPOutputStream
> > og din InputStream i din applet ind i en GZipInputStream.
>
> Lyder spændende, men nu bruger jeg ikke servlets. Mit setup er som
> følgende:
>
> DLL <-> ASP <-> Applet
>
> Applet kalder ASP-scriptet, fx http://myserver.dk/myscript.asp?arg=1
> &arg=2
>
> ASP-scriptet sørger herefter for oprette og kalde DLL'en med passende
> parametre hvorefter DLL'en spytter XML ud vha. af Response.Write (ASP-
> objekt som det har adgang til).
>
> DLL'en er udviklet i Delphi, så min komprimeringsrutine skal gerne være
> ind der kan implementeres i både Delphi og Java. Jeg har selv en smule
> erfaringer med ZLib ifbm. Delphi, men ikke med Java.

Gzip er en 'aaben' algoritme. Mon ikke der er aabne implementationer
af den ogsaa .. Proev google (fandt lige ved foerste oejekast en
..Net implementation, men ved ikke om det vil virke).


Mvh,

NB (27-05-2004)
Kommentar
Fra : NB


Dato : 27-05-04 16:45

Jeg har besluttet mig for at komprimere data, men jeg er stødt ind i
følgende problem. SAXBuilder.build kræver en InputStream, men hvordan
får jeg konverteret BufferedOutputStream fra udpakningsdelen til en
inputstream? Nedenstående er den kode jeg har indtil videre. Det er en
applet jeg skal anvende det i, men i nedenstående har jeg valgt at
eksperimentere med et applikation. Nogen som kan hjælpe mig videre?

import javax.swing.text.Document;
import java.net.URL;
import java.io.InputStream;
import java.io.FileOutputStream;
import java.io.BufferedOutputStream;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipEntry;

public class ZipTestApplication {
final static int BUFFER_SIZE = 1024;

public static void main(String[] args) {
try {
// Henter fil fra URL.
URL url = new URL("http://localhost/zip.file");
InputStream inputStream = url.openStream();

// Udpakker fil.
ZipInputStream zipInputStream = new ZipInputStream(inputStream);
ZipEntry zipEntry;

int byteCount;
byte buffer[] = new byte[BUFFER_SIZE];

while ((zipEntry = zipInputStream.getNextEntry()) != null) {
FileOutputStream fileOutputStream = new FileOutputStream
(zipEntry.getName());
BufferedOutputStream bufferedOutputStream = new
BufferedOutputStream(fileOutputStream, BUFFER_SIZE);

while ((byteCount = zipInputStream.read(buffer, 0, BUFFER_SIZE))
!= -1) {
bufferedOutputStream.write(buffer, 0, BUFFER_SIZE);
}

bufferedOutputStream.flush();
bufferedOutputStream.close();
}

zipInputStream.close();
/*
// Læser XML-dokument.
SAXBuilder saxBuilder = new SAXBuilder();
Document document = saxBuilder.build() // Kræver InputStream,
Reader m.fl.

Element rootElement = document.getRootElement();
Element dataElement = rootElement.getChild("data");

if (dataElement != null) {
String value = dataElement.getChild("value").getText();
System.out.println(value);
}
*/
} catch(Exception e) {
e.printStackTrace();
}
}
}

Martin Bratbo (26-05-2004)
Kommentar
Fra : Martin Bratbo


Dato : 26-05-04 23:02

NB skrev:
> Jeg har en applet som læser data fra en webserver. Data er et XML-
> dokument, som genereres dynamisk når appletten kalder en givet ASP-
> script. Mit problem er, at dette XML-dokument fylder omkring =3F megabyte
> og derfor tager en del tid at hente for appletten. Dette vil jeg
> selvfølgelig gerne optimere, men spørgsmålet er hvordan?
>
> XML-dokumentet består af en del tags og hvis jeg vælger, at konstruere
> mit eget dataformat uden tags, så ville data nok fylde omkring 50-100
> kilobyte. Jeg vil dog helst, at data forbliver i XML-format, da dette
> format ubenægteligt er noget mere forståeligt end et hjemmebrygget
> format. Jeg har overvejet at komprimere det data appletten henter og så
> lader appletten udpakke det, når den har modtaget det. Jeg har dog ingen
> erfaring med dette og vil derfor høre om det kan anbefales? Hvis der er
> nogen som har andre forslag, så er jeg meget lydhør :)
>
En oplagt mulighed, som mange har foreslået er at komprimere data, XML
er stærkt kompressibelt. Men du kan også som du selv foreslår lavet et
eget filformat og parse det. I den forbindelse vil jeg foreslå dig at se
på JavaCC. JavaCC er en parsergenererator i ren java, der genererer
javakode til en parser ud fra en syntaksfil. Der er selvfølgelig nogen
indlæring, men når du først har fået fat på teknikken vil du opdage at
det ofte er meget let at definere og parse dine egne formate. Ofte
nemere end at skrive kode til at læse en XML fil.
Se disse links:
https://javacc.dev.java.net/doc/docindex.html
http://www.engr.mun.ca/~theo/JavaCC-Tutorial/javacc-tutorial.pdf
https://javacc.dev.java.net/


MVH

Martin Bratbo


Thorbjoern Ravn Ande~ (27-05-2004)
Kommentar
Fra : Thorbjoern Ravn Ande~


Dato : 27-05-04 08:24

Martin Bratbo <martin@bratbo.dk> writes:

> NB skrev:
> > Jeg har en applet som læser data fra en webserver. Data er et XML-
> > dokument, som genereres dynamisk når appletten kalder en givet ASP-
> > script. Mit problem er, at dette XML-dokument fylder omkring =3F
> > megabyte og derfor tager en del tid at hente for appletten. Dette
> > vil jeg selvfølgelig gerne optimere, men spørgsmålet er hvordan?

Komprimer strømmen. Søg efter Gzip i API'et.

--
Thorbjørn Ravn Andersen
http://unixsnedkeren.dk/ravn

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

Månedens bedste
Årets bedste
Sidste års bedste