AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Stream/Datei bitweise lesen + schreiben

Ein Thema von stoxx · begonnen am 22. Jan 2005 · letzter Beitrag vom 22. Jan 2005
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von stoxx
stoxx

Registriert seit: 13. Aug 2003
1.111 Beiträge
 
#1

Stream/Datei bitweise lesen + schreiben

  Alt 22. Jan 2005, 19:13
Hallo !

hat jemand sowas schonmal umgesetzt ? Also ich meine nicht, dass ich Byteweise eine Datei auslesen kann.
sonder z.B.

ich möchte 3 Bits lesen, danach eine Integer Zahl. Danach 1 Bit, danach 5 Bits, dann wieder ein Byte.
usw ..
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Stream/Datei bitweise lesen + schreiben

  Alt 22. Jan 2005, 19:15
tut mir leid dich enttäuschen zu müssen aber das geht nicht. Du kannst höchstens byteweise schreiben. du müsstest also vorher im speicher per bitoperation das ganze mindestens auf bytegröße zusammenbauen bevor du das ganze schreibst/liest

in deinem beispiel müsstest du also 1Byte + 4Byte(Unteger) + 1Byte lesen damit du den integer vollständig hast. und dann musst du bits shiften um an den Integer richtig ranzukommen
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Binärbaum
Binärbaum

Registriert seit: 19. Jan 2005
Ort: Elstra
764 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Stream/Datei bitweise lesen + schreiben

  Alt 22. Jan 2005, 19:20
So einfach geht das nicht. Die kleinste Einheit, die man aus einer Datei lesen oder schreiben kann ist ein Byte (also 8 Bit). Demzufolge müsste man also immer mindestens ein Byte lesen und dieses dann selbst in die einzelnen Bits zerlegen. Beim Schreiben passiert das selbe in umgekehrter Reihenfolge. Und darum muss man sich als Programmierer selbst kümmern, da mir keine schon von vornherein in Delphi vorhandene Funktion bekannt ist, die das macht.

Edit:
@Thornberry: Da war wohl jemand schneller als ich.

MfG
Binärbaum
There are exactly 10 kinds of people: those who understand binary, and those who don't.
---
"Software reift beim Kunden. Bei Hardware ist es anders: Hardware fault beim Kunden." - Rainer G. Spallek
  Mit Zitat antworten Zitat
Sebastian Nintemann
(Gast)

n/a Beiträge
 
#4

Re: Stream/Datei bitweise lesen + schreiben

  Alt 22. Jan 2005, 19:30
Wenn ich dich richtig verstanden habe, möchtest du also zb. 3 Bit haben mit irgendwelchen Informationen, dann einen Integer (32 Bit) direkt dahinter usw?
Du solltest immer in ganzen bytes schreiben, also wären zwischen den 3 Bit und dem Integer 5 unbenutzte bits. Alles andere wäre IMHO wenig sinnvoll. Also ein ganzes byte benutzen, auch wenn du unter Umständen nur 1 bit davon benutzt. Eine boolean Variable ist ja auch 1 byte groß, obwohl (in der Regel) nur 1 bit davon wirklich einen Sinn hat. Das entsprechende byte musst du dann halt mit den bitweisen Operatoren (shr, shl, and, or, ...) nach deinen Wünschen manipulieren.
Falls es dir aber lediglich um das Lesen einer bereits bestehenden Datei, die du nicht selbst erzeugst geht, und diese z.B. Integer über byte-Grenzen hinweg speichert (außer natürlich die Grenzen zwischen ihren 4 byte, ihr wisst schon was ich meine), was ich aber kaum glaube, dann hilft halt nur friemeln

Viele Grüße,
Sebastian
  Mit Zitat antworten Zitat
Benutzerbild von stoxx
stoxx

Registriert seit: 13. Aug 2003
1.111 Beiträge
 
#5

Re: Stream/Datei bitweise lesen + schreiben

  Alt 22. Jan 2005, 19:38
Zitat:
Du solltest immer in ganzen bytes schreiben, also wären zwischen den 3 Bit und dem Integer 5 unbenutzte bits.
Genau das wollte ich eben nicht !!

ich glaub aber, ich hab da was gefunden.



Bitweises Ein und Auslesen von Dateien


Danke an alle
  Mit Zitat antworten Zitat
Sebastian Nintemann
(Gast)

n/a Beiträge
 
#6

Re: Stream/Datei bitweise lesen + schreiben

  Alt 22. Jan 2005, 19:44
Zitat:
Genau das wollte ich eben nicht !!
Warum nicht? Alles andere macht die Sache doch nur komplizierter! Und ein Speicherproblem solltest du auch nicht so schnell bekommen, so viele ungenutzte bits werden es ja kaum sein. Auf jeden Fall stehen die in keinem Verhältnis zu dem Mehraufwand den du dir dann machst (und auch nicht zur größeren Exe-Dateigröße ). Naja, ich weiß ja nicht, was du vorhast zu speichern.
Wenn die Datei nicht von dir kommt ist das natürlich was anderes

Viele Grüße,
Sebastian
  Mit Zitat antworten Zitat
Benutzerbild von Binärbaum
Binärbaum

Registriert seit: 19. Jan 2005
Ort: Elstra
764 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Stream/Datei bitweise lesen + schreiben

  Alt 22. Jan 2005, 19:45
Zitat von Sebastian Nintemann:
Also ein ganzes byte benutzen, auch wenn du unter Umständen nur 1 bit davon benutzt.
Also diese Variante würde zwar das Schreiben in eine Datei vereinfachen, aber beim Lesen müsste man dann immer noch Bits shiften, wenn wie im Beispiel nur 3 Bit und dann ein Integer (32 Bit) in der Datei stehen. Außerdem würde durch diese Methode der Speicherbedarf einer solchen Datei auf das Achtfache steigen, wenn immer nur ein Bit genutzt wird. Bei kleineren Dateien ist das ja noch zu verkraften, aber bei mehreren MB Daten wirds schon kritisch. Darum sollte man die alle Bits nutzten, auch wenn der Programmieraufwand erstmal höher ist: beim Speicherbedarf zahlt sich das aus.

MfG
Binärbaum
There are exactly 10 kinds of people: those who understand binary, and those who don't.
---
"Software reift beim Kunden. Bei Hardware ist es anders: Hardware fault beim Kunden." - Rainer G. Spallek
  Mit Zitat antworten Zitat
Benutzerbild von stoxx
stoxx

Registriert seit: 13. Aug 2003
1.111 Beiträge
 
#8

Re: Stream/Datei bitweise lesen + schreiben

  Alt 22. Jan 2005, 19:50
um es vielleicht kurz zu erklären, ich speicher Tickdaten von Aktien, Futures und sonstiges.
Da mein Datenvolumen von 20 GB leider etwas zuviel wird, und ich noch nichtmal den Bid / Ask Datenstrom gespeichert habe.
Wird also etwas haarig.
Kümmer mich nun um eine effizientere Datenspeicherung.

Auf der Seite ist übrigens eine gute Beschreibung dieser Verfahren .. mal schauen, ob das so klappt, wie ich mir vorstelle ..

http://www-user.tu-chemnitz.de/~mfie/compproj/
  Mit Zitat antworten Zitat
Sebastian Nintemann
(Gast)

n/a Beiträge
 
#9

Re: Stream/Datei bitweise lesen + schreiben

  Alt 22. Jan 2005, 19:55
Hallo Binärbaum,
wie oben schon gesagt glaube ich kaum, dass es so viele Bits sind, die ungenutzt bleiben. Hat man mehrere Flags kann man diese ja auch in einem Byte zusammenfassen (zb. bit eins steht für eine Option, bit 2 für eine andere usw). Sind es tatsächlich so viele ungenutzte Bits, sollte man vielleicht auch mal über den Aufbau der Datei nachdenken.

Zitat:
Also diese Variante würde zwar das Schreiben in eine Datei vereinfachen, aber beim Lesen müsste man dann immer noch Bits shiften, wenn wie im Beispiel nur 3 Bit und dann ein Integer (32 Bit) in der Datei stehen.
Gerade eben nicht Du liest beispielsweise das erste byte der Datei, von der meinetwegen die ersten drei bits Informationen enthalten. Welche bits gesetzt sind kann man leicht über Bitmasken prüfen. Danach liest du ganz normal über die Read Methoden weiter aus dem Stream (beispielsweise 4 byte als Integer). Da muss dann eben nicht geshiftet werden. Du benutzt einfach die entsprechenden Methoden und den Schreib/Lese Offset den dir die Streamklasse (falls du Streams benutzt) zur verfügung stellt.

Viele Grüße,
Sebastian
  Mit Zitat antworten Zitat
Benutzerbild von stoxx
stoxx

Registriert seit: 13. Aug 2003
1.111 Beiträge
 
#10

Re: Stream/Datei bitweise lesen + schreiben

  Alt 22. Jan 2005, 20:06
Hi Sebastian,

ja, so habe ich mir das auch schon überlegt. Aber genau dieses "Begin" Byte ist wahrscheinlich schon 4 -5 Bit zu groß
4 Bit mehr auf 1 000 000 Ticks sind schon 488 kb.

Nur Zip komprimiert den Datenstrom etwa 1:3 .. rar wäre besser, aber ist ja nicht bekannt
Nun will ich mir selber was basteln, da ich ja das Datenformat am besten kenne und effizient "komprimieren" kann.

5 Bit Zahlen schwirren nämlich auch in meinen Gedanken herum
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:21 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz