BigIntegers zum Speichern umwandeln oder "komprimieren"?

-horn-

Bekanntes Mitglied
moien,

ich muss für ein programm mit bigintegers umgehen. es können sehr langezahlen werden und seitenweise lang werden, wenn ich die speichern will.
ich würde die gerne irgendwie umwandeln oder komprimieren. ich dacht da zb darum den biginteger als string zu nehmen, dort entlang jeder zahl das gegenstück im alphabet zu zu weisen und das dann zu speichern. aber es wäre ja "meine" lösung, und vielleicht gibt es da was bessere.
es soll erstmal nur kürzer in der speicherdatei stehen und es muss perfekt rückwandelbar sein, wenn ich die speicherdatei wieder einlese.

hat das jemand schonmal gemacht?

Andreas
 

madboy

Top Contributor

-horn-

Bekanntes Mitglied
moien,

als string, damit ich an den zeichen entlang gehen kann um dann immer zwei stellen umzuwandeln und dann zu kürzen.

zb wird aus 10081517
10=j
08=h
15=o
17=q

=>jhoq

bei zahlen größer 26 muss ich dann schauen, wie ich das löse, aber wird gehen.

und echte kompression möchte ich nicht, weil die datei noch ohne dekompression augenlesbar sein soll.

grüße, Andreas
 

madboy

Top Contributor
Gehen wird das bestimmt, aber wenn du als Basis 100 nimmst (wie ich das aus deinen Posts raus lese), wirst du Probleme bekommen. Irgendwann gehen dir entweder die Zeichen aus, du bekommst unter Umständen Encoding-Probleme und/oder die Datei wird nicht so "augenlesbar" wie sie wohl sein soll.

Was ich nicht ganz verstehe: warum überhaupt komprimieren? Mit deinem Ansatz komprimierst du auf 50% im Gegensatz zur Zahlendarstellung und machst das Lesen dazu noch kompliziert. Warum nicht ganz auf die Kompression verzichten, wenn die Datei menschenlesbar sein soll? Bei heutigen GB-Preisen für Festplatten sollten die 50% nicht ins Gewicht fallen.
 

nrg

Top Contributor
also wenn dann würde ich immer 3 zahlen zu einem char casten. dadurch solltest zu 66% kompression kommen. Das wird dann aber kaum mehr lesbar sein und ob es wirklich so sinnvoll ist, dass die Datei 20kb statt 60 ist, mag ich grad auch irgendwie zu bezweifeln.
 

Illuvatar

Top Contributor
Vielleicht versteh ich was nicht, aber warum speicherst du nicht einfach direkt die Zahl, anstatt irgendwas mit Strings im 10er oder von mir aus 100er System rumzumachen?
Also mit der Methode hier und dann einfach so schreiben?

Edit: Die Forensoftware kriegt den 2. Link nicht hin :oops: Gemeint ist die Methode OutputStream#write(byte[])
Edit2: Danke ;) Buttons... Anführungszeichen in URL-Tags... neumodischer Kram :D
 
Zuletzt bearbeitet:

Marco13

Top Contributor
Es geht nur darum, das ganze in eine Datei zu schreiben? Warum nicht einfach einen ObjektOutputStream in einen ZipOutputStream flanschen und sich im Phil Katz gebührenden Ruhm sonnen? :bahnhof:
 

-horn-

Bekanntes Mitglied
moien,

wie gesagt, es kann eventuell leicht eine integerzahl mit mehr 10^30 stellen dabei rauskommen, und wenn ich das einfach so in die datei speichere wäre das immer ein mega platzbedarf rein von den ziffern her.
und wie erwähnt möchte ich nicht extra zippen, weil ich das als datei ohne dekompressionsaufwand haben möchte, da da noch andere dinge in der xml-datei drin stehen, die ich brauche.

grüße, Andreas
 
B

bone2

Gast
warum schreibst du das ganze nicht als byte in die datei?

wenn es unbedingt ein string werden soll kann man das toString mit Basis benutzen, das höchste mögliche ist 36

Java:
        byte[] ar = "ijhfohjgdsgheiouökaöshijhg3684394436ljaghdsajghdsaiuhpeaw853z83wopauw3tlo85z205ue".getBytes();
        BigInteger i = new BigInteger(ar);
        System.out.println(i);
        System.out.println(i.toString(36));
 

Andi_CH

Top Contributor
wie gesagt, es kann eventuell leicht eine Integerzahl mit mehr 10^30 Stellen dabei rauskommen und wenn ich das einfach so in die Datei speichere, wäre das immer ein mega Platzbedarf rein von den Ziffern her.
Und wie erwähnt möchte ich nicht extra zippen, weil ich das als Datei ohne Dekompressionsaufwand haben möchte, da da noch andere dinge in der xml-datei drin stehen, die ich brauche.

Irgendwie denke ich es braucht einige klärende Worte, denn irgendwie läuft da einiges aneinander vorbei :) Illuvatar vermischt IMHO zwei Dinge.

Ich interpretiere das so, dass die XML Datei nicht gezippt werden soll weil sie ohne Aufwand gelesen werden soll, dass es aber einen Aufwand bedeuten darf, die bigint-Werte zu rekonstruieren.

Auf human readabililty der Bigint-Werte musst allerdings definitv verzichtet werden, wenn wirklich Platz gespart werden soll.
Ist readability ein Muss, würde ich auf ein kleines Programm setzen das die Daten dekomprimiert und anzeigt.

10^30 Stellen als 10^300 sind 996.6 Bit ;-) ~125Byte -> Es ist also möglich sein, den Wert in dieser Grössenordnung zu speichern, aber ob und wie das in XML der Fall ist, weiss ich nicht.

Gesucht ist als ein Algorithums der den Bigint-Wert z.B. in einen byte[] umwandelt
Dann diesen in die Datei schreibt
Den byte[] zurücklist
Den byte[] in bigint zurück wandelt

Ist das strukturiert genug? ;)
 

swp

Mitglied
Ich würde das ganz krude machen:

Java:
ByteArrayOutputStream bOut = new ByteArrayOutputStream();
ObjectOutputStream oOut = new ObjectOutputStream(new GZIPOutputStream(bOut));
oOut.writeObject(myBigInteger);
oOut.flush();
oOut.close();
byte[] compressed = bOut.toByteArray();

Und zum zurücklesen:
Java:
ObjectInputStream oIn = new ObjectInputStream(new GZIPInputStream(new ByteArrayInputStream(compressed)));
BigInteger myBigInteger = (BigInteger) oIn.readObject();
oIn.close();

Statt ByteArrayOutputStream kannst du natürlich auch FileOutputStream nehmen oder woimmer du hin ausgeben willst. Und du kannst mit writeObject bzw. readObject auch mehrere Objekte hintereinander abspeichern. Um die korrekte Trennung und die richtige Behandlung der Daten kümmert sich Java. Du musst nur aufpassen, dass du die geworfenen Exceptions richtig fängst. IOExceptions sind klar, aber es können auch ClassCastExceptions und ClassNotFoundExceptions auftreten. Wenn du mit Java-eigenen Klassen arbeitest, sind letztere eher unwahrscheinlich - hier sollte fangen und als RuntimeException neu werfen reichen - aber ClassCastExceptions solltest du explizit behandeln.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Seltames Problem bei Rechnen mit BigIntegers Java Basics - Anfänger-Themen 2
W Letzten beiden Ziffern eines BigIntegers bestimmen? Java Basics - Anfänger-Themen 20
M Länge eines Arrays als Variable speichern möglich? Java Basics - Anfänger-Themen 14
R Liste in Variable speichern Java Basics - Anfänger-Themen 6
onlyxlia Anzahl Random Zahlen mit Scanner abfragen und in Array speichern Java Basics - Anfänger-Themen 10
G JTree speichern und wieder einlesen Java Basics - Anfänger-Themen 5
P Wie kann ich in meinem Java Programm etwas dauerhaft speichern? Java Basics - Anfänger-Themen 5
P Wie kann ich beispielsweise Speicherstände eines Spiels DAUERHAFT in meinem Programm speichern? Java Basics - Anfänger-Themen 3
J Objekte in JSON speichern?? Java Basics - Anfänger-Themen 1
A Daten aus einer HashMap aus einer DB speichern und mit neuen Werten vergleichen Java Basics - Anfänger-Themen 8
I Bild richtig speichern / Hochkant im File Explorer, nach Upload vertikal Java Basics - Anfänger-Themen 9
I Objekte in ShareProject speichern um später zu nutzen Java Basics - Anfänger-Themen 4
I Passwort in Datenbank speichern um später wieder auszulesen Java Basics - Anfänger-Themen 5
S mehrere TreeSets so speichern, dass man sie miteinander vergleichen kann Java Basics - Anfänger-Themen 1
I Datei (Bild) Drucken und wie Druckeinstellung speichern? Java Basics - Anfänger-Themen 3
I H2 Datenbank starten / Daten in File speichern Java Basics - Anfänger-Themen 25
M Werte in Felder speichern und geordnet ausgeben Java Basics - Anfänger-Themen 8
A CSv.Datei einlesen und die werte in zweidemosional Int Array speichern Java Basics - Anfänger-Themen 9
L Dauerhaftes Speichern einer Eingabe bei einer ArrayList Java Basics - Anfänger-Themen 26
S Eine Variable in einem Array speichern Java Basics - Anfänger-Themen 5
T Permanentes speichern von Objekten in einer ArrayList Java Basics - Anfänger-Themen 6
M Mehrere Daten/ Variablen Speichern Java Basics - Anfänger-Themen 9
berserkerdq2 Ich gebe eine ArrayList als List zurück per MEthode, wie kann ich nun aber die ArrayList speichern? Java Basics - Anfänger-Themen 46
I Historisierung - Alter Wert, Neuer Wert... wie speichern? Java Basics - Anfänger-Themen 44
berserkerdq2 Wie datum im default format speichern? Java Basics - Anfänger-Themen 5
M Objekt in einem Objekt speichern Java Basics - Anfänger-Themen 9
J Speichern von zwei Variablen durch Auslesen aus einem Numberfield Java Basics - Anfänger-Themen 2
f3mys Objektwerte in Liste speichern und wieder abrufen Java Basics - Anfänger-Themen 23
I Liste von Infos von einer eigenen Annotation in Liste speichern Java Basics - Anfänger-Themen 0
U Wie ein Attribut von einer Klassenmethode in der Klasse speichern= Java Basics - Anfänger-Themen 2
B Screenshots machen und zwar viele und speichern Java Basics - Anfänger-Themen 12
C XML Datei speichern und laden Java Basics - Anfänger-Themen 18
Marlena Bauer Konsolenausgabe in .txt speichern Java Basics - Anfänger-Themen 6
B JaxB - Property vom Typ Object und LocalDateTime speichern? Java Basics - Anfänger-Themen 0
ansystin Teilerfremde Zahlen ausgeben + Zahlenausgabe speichern Java Basics - Anfänger-Themen 3
J Wert in einer json Datei ändern und speichern Java Basics - Anfänger-Themen 3
C File speichern Java Basics - Anfänger-Themen 5
D String und char in String speichern Java Basics - Anfänger-Themen 5
J Alle .java Dateien von einem Verzeichnis in eine Zip speichern Java Basics - Anfänger-Themen 2
I Werte (u.a. Geldbeträge) in Datenbank speichern und Rundungen? Java Basics - Anfänger-Themen 8
J Problem mit einer Methode, die beliebig viele Objekte in Array speichern soll Java Basics - Anfänger-Themen 6
H Daten aus einer Datei in eine Liste speichern Java Basics - Anfänger-Themen 23
B JaxB - speichern vom Typ "Object" Java Basics - Anfänger-Themen 8
GermanPie Nachrichten Speichern Java Basics - Anfänger-Themen 2
M Objekte in Array speichern und ausgeben Java Basics - Anfänger-Themen 17
C Wo Defaultpfad speichern? Java Basics - Anfänger-Themen 2
M Integer aus aus einer Klasse in andere speichern Java Basics - Anfänger-Themen 12
Dimax stream in string[] speichern Java Basics - Anfänger-Themen 6
H Liste speichern. Was lässt sich verbessern? Java Basics - Anfänger-Themen 7
C Fehler beim Speichern (Build projekt) Java Basics - Anfänger-Themen 42
J Ich brauche Hilfe bei einem Code (Variablen speichern) Java Basics - Anfänger-Themen 29
C Verschiedene Objekte in einer Liste speichern Java Basics - Anfänger-Themen 6
D Input/Output Input von zwei Koordinaten validieren und anschließend Werte speichern Java Basics - Anfänger-Themen 7
N Speichern von Werten in Variablen nach Schließen des Programms Java Basics - Anfänger-Themen 3
G Problem beim Speichern von Objekten in einer Datei Java Basics - Anfänger-Themen 7
I ArrayList - Methode zum Speichern eines Eintrags in einer Datei Java Basics - Anfänger-Themen 17
H Objekt im Array speichern Java Basics - Anfänger-Themen 2
H Objekt als Attribut speichern Java Basics - Anfänger-Themen 11
B Text-Datei nur in Stream speichern und dann ausgeben Java Basics - Anfänger-Themen 3
M JTextField in ArrayList speichern Java Basics - Anfänger-Themen 4
L Nur Bestimmte Werte aus einem Array in ein anderes Speichern Java Basics - Anfänger-Themen 11
S Zweidimensionales Array in ein eindimensionales Array speichern Java Basics - Anfänger-Themen 6
A Wie zwei zahlen in einer Variable speichern? Java Basics - Anfänger-Themen 7
C ResultSet in Array speichern Java Basics - Anfänger-Themen 5
S Byte-Array kann chars speichern? Java Basics - Anfänger-Themen 3
J Kann man files in einer Klasse speichern. Java Basics - Anfänger-Themen 2
B Infos zu Attribute in einer Klasse speichern Java Basics - Anfänger-Themen 3
M Input/Output JTextField Eingabe in String Variable speichern Java Basics - Anfänger-Themen 15
A Kann man eine Methode als Variable speichern und danach noch verändern? Java Basics - Anfänger-Themen 6
D Werte aus einem BinärBaum in einem Array speichern Java Basics - Anfänger-Themen 1
I Datei in Programm speichern Java Basics - Anfänger-Themen 3
A .txt-Datei mit Java speichern Java Basics - Anfänger-Themen 2
M Speichern unter. Java Basics - Anfänger-Themen 11
S Java Daten in Excel speichern Java Basics - Anfänger-Themen 1
S Daten speichern, ohne Datenbank Java Basics - Anfänger-Themen 8
L Objekt aus Textdatei in ArrayList speichern Java Basics - Anfänger-Themen 4
L Kommandozeileneinträge in Array speichern Java Basics - Anfänger-Themen 4
B HTML Code in XML speichern Java Basics - Anfänger-Themen 3
G Benutzereingaben durch Zeilenumbruch trennen und in Array individueller Größe speichern Java Basics - Anfänger-Themen 20
G JTextField per Button speichern und an andere Klasse übergeben Java Basics - Anfänger-Themen 2
Shallty Daten speichern und ändern? Java Basics - Anfänger-Themen 32
R Objekte aus Array als String + kommasepariert speichern Java Basics - Anfänger-Themen 12
N Best Practice Rückgabe eines Terminal Befehls in eine Variable speichern Java Basics - Anfänger-Themen 27
B XML in DB speichern -> Regelkonzept Java Basics - Anfänger-Themen 2
T Daten von Objekten speichern Java Basics - Anfänger-Themen 7
A Einträge aus Tupeln nach Regeln in Liste speichern Java Basics - Anfänger-Themen 8
void19 Methoden Binärbaum Inorder Traversierung in Array speichern Java Basics - Anfänger-Themen 1
X TextField-Inhalt mit Button in .txt-Datei speichern Java Basics - Anfänger-Themen 16
C Methoden Problem beim Speichern von Variablen Java Basics - Anfänger-Themen 1
J Geld speichern und wieder auslesen Java Basics - Anfänger-Themen 10
K Geburtsdaten von Mehreren Personen speichern und Alter ausgeben Java Basics - Anfänger-Themen 11
F Beste Datenstruktur zum Speichern? Java Basics - Anfänger-Themen 1
Dimax Programme ,als Text in MySql speichern Java Basics - Anfänger-Themen 7
C Erste Schritte ArrayIndexOutOfBoundsException beim Speichern im Array Java Basics - Anfänger-Themen 2
D Datei auslesen & Werte in Variable speichern Java Basics - Anfänger-Themen 12
D Erste Schritte Projekt in Ecplise in einer .zip Datei speichern Java Basics - Anfänger-Themen 8
L Speichern und Laden Java Basics - Anfänger-Themen 7
I Projekt als .jar Datei speichern - Bilder werden nicht mehr angezeigt Java Basics - Anfänger-Themen 4
H MouseListener begrenzen und Speichern Java Basics - Anfänger-Themen 1
M Wie kann ich im JAVA-GUI im Textfeld ein Array speichern Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben