Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB.NET: zlib tiedostosta pätkän lukeminen

Sivun loppuun

Hennkka [17.03.2011 12:05:02]

#

Yritän kirjoittaa vb.netillä Minecraftiin serveriä ja nyt päädyin umpikujaan. Tiedosto (kartta) alkaa pakkaamattomalla headerilla, jossa lukee pakattujen osien sijainti ja pituus tiedostossa. Tarkoitus olisi saada luettua zlib:illä pakatut osat, kun tiedän, kuinka paljon pakatun osan pituus on pakattuna. Täydellinen formaatti löytyy täältä.

Grez [17.03.2011 12:08:52]

#

Eli mikä on ongelmana?

Hennkka [17.03.2011 12:17:48]

#

Se, että miten sitä zlibbiä käytetän tiedoston keskeltä (tai ylipäätänsä tiedoston) lukemiseen. Toivoisin, että joku antaa ihan valmiin koodin. Itselläni kun ei ole yhtään kokemusta zlibin käytöstä. Ihan oppistarkoituksessa tätä teen.

Grez [17.03.2011 12:37:17]

#

Olitko ajatellut käyttää zlib:in dll suoraan vai jotain valmiiksi paketoitua versiota, kuten zlib.net ? http://www.topshareware.com/ZLIB.NET-download-46526.htm

Hennkka [17.03.2011 12:43:58]

#

Jotenkin näin:

imports zlib


Dim rawReader As New StreamReader(GetFileName())
Dim reader As Stream = rawReader.BaseStream

Dim zstream As New ZInputStream(reader)

zstream.ReadByte()

Veikkaisin, että kirjasto on tämä http://www.componentace.com/zlib_.NET.htm
Se tuli yhden valmiin serverin mukana, jota kopioin harjoitus mielessä. Valitettavasti serveri vain ei ole yhteensopiva uuden formaatin kanssa.

Edit. Näköjään viesti muuttui. Itselleni on ihan sama, käytänkö suoraan zlibiä vai jotain .net-kirjastoa.

Grez [17.03.2011 12:57:15]

#

No tuossa esimerkissäsihän voisit sanoa

reader.Seek(amount, System.IO.SeekOrigin.Begin)

ennen kuin annat readerin ZInputStreamille. Ja amount on siis muuttuja, jossa tieto millä etäisyydellä alusta zlib-pakattu data alkaa.

Loogisesti tuo ZInputStream sitten lukisi siitä eteenpäin

Hennkka [17.03.2011 13:35:19]

#

Hyvä, kiitos. Mitenkäs saan sen vielä lopettamaan oikeassa kohdassa? Tämä koodi taitaa toimia oikein (?):

reader.Seek(offset + 5, SeekOrigin.Begin)

Dim zstream As New ZInputStream(reader)
Dim bytes As New List(Of Byte)

While zstream.BaseStream.Position < offset + length
    Dim buffer(0) As Byte
    zstream.Read(buffer, 0, 1)
    bytes.AddRange(buffer)
End While

Metabolix [17.03.2011 15:00:27]

#

Voisit varmaankin lukea ensin pakatun datan Byte-taulukkoon ja luoda siitä sitten MemoryStreamin zlibiä varten.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta