![]() |
Stream/Datei bitweise lesen + schreiben
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 .. |
Re: Stream/Datei bitweise lesen + schreiben
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 |
Re: Stream/Datei bitweise lesen + schreiben
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 |
Re: Stream/Datei bitweise lesen + schreiben
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 |
Re: Stream/Datei bitweise lesen + schreiben
Zitat:
ich glaub aber, ich hab da was gefunden. ![]() Danke an alle :-) |
Re: Stream/Datei bitweise lesen + schreiben
Zitat:
Wenn die Datei nicht von dir kommt ist das natürlich was anderes ;) Viele Grüße, Sebastian |
Re: Stream/Datei bitweise lesen + schreiben
Zitat:
MfG Binärbaum |
Re: Stream/Datei bitweise lesen + schreiben
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 .. ![]() |
Re: Stream/Datei bitweise lesen + schreiben
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:
Viele Grüße, Sebastian |
Re: Stream/Datei bitweise lesen + schreiben
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 ;-) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:29 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz