Speicherplatz eines Strings?

Status
Nicht offen für weitere Antworten.

Verjigorm

Top Contributor
Hallo, ich baue grad nen sehr grossen String zusammen (bis zu 500mb Dateigröße)
Das ganze steckt in einem Stringbuffer und ich würde gerne vorher wissen, wieviel Speicherplatz mein String im Filesystem verbrauchen wird (grobe Abschätzung reicht)

nun habe ich keine geeignete Methode von Stringbuffer selbst gefunden
und mir deswegen was aus logischen Zusammenhängen zusammengezimmert:

Code:
System.out.println(buffer.length()*16/8/1000/1000);

Idee war:
Anzahl der Zeichen im StringBuffer * CharGröße(16bit) / Größe auf Megabyte bezogen

Als Ausgabe krieg ich bei den ersten Tests ~30mb
wenn ich den String dann in ne Datei schreibe, ist die Datei aber nur 5,xx mb groß

Und nun die Frage, wie gehts besser bzw. richtig? :D

gruß Verjigorm
 
T

tuxedo

Gast
Ähm ...

length()
Returns the length (character count).

Gilt denn "character count" == Anzahl Zeichen mit je 16 Bit (unicode)??
Wenn deine Datei im Unicode-Format gespeichert ist, dann kannst du denke ich so rechnen. Ansonsten würde ich sagen:

buffer.length() entspricht der Anzahl zeichen im StringBuffer. Und das würde bei einer nicht-Unicode-Speicherung doch der Anzajl Bytes des File entsprechen?

MegaByte wird mit 1024 und nicht mit 1000 gerechnet (wenn mich die ganze "neue" MiB und KiB Sache jetzt nicht allzusehr verwirrt hat).
Also sollte deine Rechnung doch so aussehen:

Code:
System.out.println("Länge in MB: "+(double)(buffer.length()/1024/1024));

Probiers und gibt bescheid was raus kommt.

- Alex
 

Verjigorm

Top Contributor
Nun kommt Länge in MB: 15.0
wobei ich denke da fehlt noch /8, weil wir sind ja im Bitbereich und müssen erstmal auf Byte oder seh ich das falsch?

1000 oder 1024 fand ich jetzt nimmer so entscheidend, hast natürlich recht ;)

Windoof zeigt mir für die Datei jedoch 5,72MB an


edit: es kommt ja nicht auf die Kommastellen drauf an, deswegen hab ich den Wert auch nicht in double gecastet
grobe Richtigkeit vorm Komma (bei MB) würd reichen
 
T

tuxedo

Gast
Also laut API-Dok sind wir nicht im Bit-Bereich, sondern im Byte-Bereich. Geht eigentlich nur drum, ob Unicode (16 bit für ein Zeichen) oder nicht-unicode (8bit für ein Zeichen). "Character" wird in Java als UniCode behandelt und mit 16 Bit belegt. Wenn deine Datei auf kein UniCode hat, dann sollte sie 8 Bit/Zeichen haben. Und 8Bit = 1 Byte.

Was spuckt denn ein einfaches "buffer.length()" aus? Ohne Berechung?

- Alex
 
T

tuxedo

Gast
Was heisst generierte Länge? 16Mio darf da nicht stehen wenn deine File 5,27MB groß ist.

- Alex
 

Verjigorm

Top Contributor
hm ich hab das mal nen bissl einheitlicher gemacht:

1Mio mal "a" in die datei geschrieben -> 1Mio Bytes -> ~1MB
lese ich nun die Datei in einen StringBuffer aus und mache
buffer.length(), dann kommt da 2Mio raus ... wieso denn das?
 
T

tuxedo

Gast
Keine Ahnung was du machst, aber das hier funzt 1a (abgesehen davon dass ich, faul wie ich eben auf die schnelle war, immer wieder ein "new String()" mache). Der SB ist exakt so groß wie die File selbst. Windows sagt mir, die File wäre

6,02 MB (6.317.843 bytes)

groß. Und Das Programm gibt aus:

In File: 6317843
In StringBuffer: 6317843

Code:
	public static void main(String[] args) throws IOException {
		StringBuffer sb = new StringBuffer(1);
		
		FileInputStream fis = new FileInputStream(new File("c:/test.txt"));
		
		
		
		byte[] b = new byte[512];
		
		int bytesCurrentlyRead = 0;
		int bytesReadTotally = 0;
		
		while (bytesCurrentlyRead>=0){
			
			bytesCurrentlyRead = fis.read(b);
			
			if (bytesCurrentlyRead>=0) {
				bytesReadTotally+=bytesCurrentlyRead;
				sb.append(new String(b,0,bytesCurrentlyRead));
			}
			
			
		}

		System.out.println("In File: "+bytesReadTotally);
		System.out.println("In StringBuffer: "+sb.length());

- Alex
 

The_S

Top Contributor
alex0801 hat gesagt.:
MegaByte wird mit 1024 und nicht mit 1000 gerechnet (wenn mich die ganze "neue" MiB und KiB Sache jetzt nicht allzusehr verwirrt hat).

Ne, genau andersrum ;) . Mega, Kilo, Giga, ... gibt es ja nicht nur in der Informatik, sondern sind allgemeingültige Bezeichnungen, die auf 10er Basis beruhen => wenn du in der Metzgerei n Kilo Wurst bestellst, bekommst du ja auch 1000 Gramm und nicht 1024. Diese "neuen" Bezeichnungen stehen für "Binär", also basierend auf 2er-Basis. Damit bist du dann wieder bei den 1024 (2^10).
 
T

tuxedo

Gast
Ähm, das war ja die "verwirrung" in den letzten Jahren. MB, KB, GB wurden doch "fälschlicherweise" mit 1024 gerechnet. Und da es manche dann doch wieder "genau" genommen haben, haben sie mit 1000 gerechnet. Das hat dazu geführt dass Festplattenkapazitäten immer mal wieder anders waren. Je nachdem wie der Hersteller gerechnet hat. Und erst wegen diesem Irrtum wurden die Binäreinheiten eingeführt, damit Kilo endlich wieder 1000 und nicht 1024 ist....
 

The_S

Top Contributor
äh ... ich glaub ich hab mich bei deiner ersten Aussage verlesen ... dachte du hast gemeint, dass Megabyte (ohne i ;) ) 1024 sind, und die mit i 1000 :oops:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Performance/Speicherplatz-Nutzung bei Tests Allgemeine Java-Themen 6
Y Auszuführendem Projekt mehr Speicherplatz zuweisen Allgemeine Java-Themen 3
L Speicherplatz eies RIESEN objektes direkt wieder freigeben Allgemeine Java-Themen 5
O regulärer Ausdruck zum durchsuchen eines Strings verwenden Allgemeine Java-Themen 2
T Rotationswinkel eines Bildes bestimmen Allgemeine Java-Themen 4
C Probleme beim Erstellen eines runnable-jar files Allgemeine Java-Themen 1
J JavaScript innerhalb eines Java Projekts ausführen Allgemeine Java-Themen 2
Encera Größe eines Objektes in Byte berechnen Allgemeine Java-Themen 2
8u3631984 Prüfen ob min. ein Element eines Sets in einem anderen Set enh Allgemeine Java-Themen 4
M Array Rang eines Elements Allgemeine Java-Themen 4
OnDemand Teile eines Links entfernen Allgemeine Java-Themen 6
H Auslesen eines (LDAP-)Attributs in Active Directory Allgemeine Java-Themen 2
W JSON parsen eines ,mit JS.stringify erstellten Strings Allgemeine Java-Themen 27
H Textposition eines gedrehten Textes verschieben Allgemeine Java-Themen 8
berserkerdq2 run-methode eines Threads so programmieren, dass 30x die Sekunde etwas ausgeführt wird. Allgemeine Java-Themen 44
E Ersetzen eines Bildes in der Kopfzeile eines Word-Docx-Dokuments mit Apache POI XWPF Allgemeine Java-Themen 0
N Fahrtrichtung eines selbstfahrenden Auto ändern Allgemeine Java-Themen 3
T Letztes Zeichen eines Strings enfernen Allgemeine Java-Themen 14
S Übergabe eines Sortierkriteriums für ein Artikel Array mittels BiPredicate<Artikel, Artikel> Allgemeine Java-Themen 13
gotzi242 Schatzsuche mithilfe eines O(log n) Algorithmus Allgemeine Java-Themen 2
C Koordinaten LONG/LAT eines neuen Punktes in bestimmter Entfernen und Winkel berechnen Allgemeine Java-Themen 3
Tobero Meine Funktion für das beinhalten eines Punktes in einem Kreis funktioniert nicht Allgemeine Java-Themen 5
LimDul Direktes return eines Array geht nicht Allgemeine Java-Themen 20
S Mittelwert anhand eines Stream berechnen Allgemeine Java-Themen 5
kodela Breite eines erweiterten Monitors feststellen Allgemeine Java-Themen 5
R Zeilen eines 2d Arrays abwechselnd links und rechts mit Nullen auffüllen Allgemeine Java-Themen 14
Zrebna Alternative Darstellung eines Codesnippets Allgemeine Java-Themen 33
kodela Inhalt eines Arrays ändert sich mysteriös Allgemeine Java-Themen 2
bueseb84 Wget mit Wildcards - oder wie lädt man bei JFrog die letzte Version eines Artifacts herunter Allgemeine Java-Themen 3
N Erkennen eines Programs Allgemeine Java-Themen 2
N Pausieren eines Programmes Allgemeine Java-Themen 4
D Input/Output Implementierung eines CommandHandlers/Parsers für viele Eingaben Allgemeine Java-Themen 26
M Gibt es eine API die den aktuellen Wert eines Indikators beim Trading zurückgibt? Allgemeine Java-Themen 7
F Wie bekommt man alle Filenamen eines Webserver Verzeichnisses Allgemeine Java-Themen 6
A Fehler beim Öffnen eines Projekts Allgemeine Java-Themen 6
N Eigenschaften eines Buttons per Setter verändern Allgemeine Java-Themen 5
S Ausfuehrung eines Programms aufzeichnen..? Allgemeine Java-Themen 4
X Ermittlung eines doppelte Paars mit Streams Allgemeine Java-Themen 50
Stonie Prüfen von direkter Implementierung eines Interfaces Allgemeine Java-Themen 7
S Vorbereitung eines Praktikums Allgemeine Java-Themen 4
H Aufruf eines Web Service anhand übergebenen Parameter Allgemeine Java-Themen 2
M Weiterleiten von empfangenen Nachrichten eines StompSessionHandlers Allgemeine Java-Themen 1
J Programm zum Suchen eines Wortes im Dateisystem Allgemeine Java-Themen 4
H Rename eines Projekts Allgemeine Java-Themen 1
J Fenstergröße eines anderen Programmes auslesen Allgemeine Java-Themen 9
ReinerCoder auf Klassen innerhalb eines package zugreifen Allgemeine Java-Themen 22
Meeresgott Erste Schritte Sourcetree - Git | Suchen eines Commits Allgemeine Java-Themen 2
E Status eines USB Mikrofon abfragen Allgemeine Java-Themen 2
DaCrazyJavaExpert OOP Ansätze und Tipps zum Porgrammieren eines Taschenrechners Allgemeine Java-Themen 25
A OOP Problem beim Berechnen der größten Fläche eines Ringes Allgemeine Java-Themen 19
JavaNewbie2.0 Start eines Anderen Programm erkennen Allgemeine Java-Themen 6
I Verbindung eines Java-Plugins mit Webserver Allgemeine Java-Themen 3
L Auswertung eines Testes funktioniert nicht Allgemeine Java-Themen 37
G Iteratoren - Wie kann man mithilfe von Iteratoren nur jeden zweiten Wert eines TreeSets ausgeben? Allgemeine Java-Themen 4
GreenTeaYT Elemente eines 2Dim LinkedList von links nach rechts ausgeben? Allgemeine Java-Themen 0
B Spalten eines 2d-Arrays Allgemeine Java-Themen 2
M Rechenprogramm eines wissenschaftlichen Taschenrechners Allgemeine Java-Themen 4
S Eigenschaften (hier Verknüpfung) eines Files lesen Allgemeine Java-Themen 2
E Typüberprüfung eines chars Allgemeine Java-Themen 5
H Hilfe bei Erstellung eines Hilfe Fenster bei Tastendruck (F1 bei Win98) Allgemeine Java-Themen 5
T Teile eines Double-Wertes verändern Allgemeine Java-Themen 2
R Rückgabe eines Arrays durch Funktion Allgemeine Java-Themen 9
H Datentypen Typ eines Arrays überprüfen Allgemeine Java-Themen 9
RalleYTN DPI eines Bildes ändern Allgemeine Java-Themen 4
N Methoden Methoden einer Klasse auf Grundlage eines Strings aufrufen Allgemeine Java-Themen 6
K Bestimmten Bereich eines Strings lesen Allgemeine Java-Themen 6
C -Verschiedene Versionen eines Programms verwalten Allgemeine Java-Themen 7
O Datentypen Erstellung eines Containers, der verschachtelte Map-Strukturen beherbergen kann Allgemeine Java-Themen 0
A einmalige Ausführung eines Methodenabschnittes Allgemeine Java-Themen 3
F CPU Last eines Thread ausfindig machen Allgemeine Java-Themen 0
L Menge der Buchstaben eines Textes zählen Allgemeine Java-Themen 3
F Teil eines Bildes laden Allgemeine Java-Themen 1
Neumi5694 Operatoren regEx für das Erstellen eines Strings verwenden Allgemeine Java-Themen 3
P Löschen eines keys in einer SortedMap Allgemeine Java-Themen 5
RalleYTN Input/Output URL eines Zip Entry? Allgemeine Java-Themen 2
S Alle Methodenaufrufe eines Threads notieren..? Allgemeine Java-Themen 7
J NullPointerExeption bei Inizialisierung eines Arrays Allgemeine Java-Themen 3
I Setzen und Lesen eines Objektes (Enum?) Allgemeine Java-Themen 10
L Implementierung eines AVT-Baums Allgemeine Java-Themen 2
D Größe der Zahlenkombinationen eines Arrays begrenzen Allgemeine Java-Themen 3
D Objekt entlang eines Funktionsgraphens bewegen Allgemeine Java-Themen 6
B Existenz eines Files max 30 sec prüfen Allgemeine Java-Themen 5
U Koordinaten alle Pixel eines Dreiecks zeichnen ausgeben Allgemeine Java-Themen 5
P Wie funktioniert das Feedback eines Klicks auf eine Java GUI Allgemeine Java-Themen 10
thet1983 nach teilen eines Dateinamens suchen Allgemeine Java-Themen 6
T Bezeichnung eines Objektes mit String/int kombinieren Allgemeine Java-Themen 3
Z Auswerten eines eingegeben Termes Allgemeine Java-Themen 13
X Registrierung eines Ecore-Models außerhalb der Eclipse-Umgebung Allgemeine Java-Themen 0
R Instanzen eines Programms Allgemeine Java-Themen 8
I Arbeitsmaterialien eines Softwareentwicklers? Allgemeine Java-Themen 7
L Größe eines Objekts im Arbeitsspeicher Allgemeine Java-Themen 1
D Name eines Nicht-String Objekts ausgeben Allgemeine Java-Themen 4
A Helligkeit eines Bildes berechnen Allgemeine Java-Themen 1
L Anzahl der Tage eines Monats Allgemeine Java-Themen 3
S Java Problem bei der Rückgabe eines Arrays Allgemeine Java-Themen 19
C Best Practice Tiefe Kopie eines Arrays unbekannter Dimension und unbekannten Typs Allgemeine Java-Themen 4
H Klassennamen zum Aufruf eines statischen Feldes aus Variable holen Allgemeine Java-Themen 4
C Methode für tiefe Kopie eines unbekannt (dimensionierten & typisierten) Feldes realisierbar? Allgemeine Java-Themen 7
M final vor dem parameter eines Konstruktors Allgemeine Java-Themen 1
B Hintergrundbild eines JFrames? Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben