Mit JavaMachine Datei vom Host in den Ram des Host laden.
-
Hallo,
ist es möglich mit einem Java-Programm eine Datei vom Host, so in den Ram des Host zu laden, dass dann auf die Datei zugegriffen werden kann, so als were die Datei auf der HDD?
-
memorymap, nio
-
buzz schrieb:
memorymap, nio
Ich glaube ich wurde falsch verstanden. Entschuldigung. Ich meine kein Programm, was so einen Vorgang assistiert, sondern ich wollte wissen ob die JavaMachine es unterstützt, dass anfordern von Arbeitsspeicher Reservierung und das es dann die angegebene Datei einlädt und per Zeiger drauf zugreiffen läst. Um z.B. einen Stream mit diesem Zeiger zu erstellen.
Danke!
-
Red mal bitte entweder in zusammenhängemdem Deutsch oder Englisch mit Fachbegriffen; aber so wie du die Frage gestellt hast ergibt sie einfach nur Null Sinn...
-
asfasfasfasfasf schrieb:
Red mal bitte entweder in zusammenhängemdem Deutsch oder Englisch mit Fachbegriffen; aber so wie du die Frage gestellt hast ergibt sie einfach nur Null Sinn...
Ich möchte die zu bearbeitenden Dateien nicht so in den Arbeitsspeicher laden, dass sie über den Host z.B. auf R:\ verfügbar sind. Diese Methode geht bei Windows ja nur mit einem Treiber und einem Programm.
Ich möchte mit einem JavaProgramm bewirken, dass die JavaMachine eine Datei in den Arbeitsspeicher lädt und einen Zeiger zurückgibt um dann z.B. mit einem Stream drauf zugreiffen zu können. Ist dies möglich, mit einem JavaProgramm gezielt zu bewirken das eine Datei in den Arbeitsspeicher geladen wird?
-
Ja... vermutlich?
Was soll das denn für ein Stream sein der auf die Daten zugreift?
-
Ja, man kann mit Java Dateien lesen.
-
SG1 schrieb:
Ja, man kann mit Java Dateien lesen.
hab ich mir auch grad gedacht
-
Das man mit Java Dateien lesen kann, war mir schon klar aber ich wüsste gerne ob es auch möglich ist mit Java eine Datei zu Lese-/Schreibzwecken mit Java, voher mit Java in den Arbeitsspeicher zu laden.
Bzw. welche (Header) bietet denn solch eine Funktion um da was in den Arbeitsspeicher zu laden? Und wie würde das dann passieren? Gibt es dann eine Arbeitsspeicherreservierung? Wird ein Dateisystem eingerichtet mit Pfad-Adresse? Oder wird die Datei einfach in den Arbeitsspeicher geladen und der Stream ist dann der Zeiger? Also keine Pfad-Adresse?
Oder noch viel besser, wo bekomme ich Informationen, wie diese Funktion fubktioniert, wenn vorhanden?
Danke!
-
Perfomancezierer schrieb:
Das man mit Java Dateien lesen kann, war mir schon klar aber ich wüsste gerne ob es auch möglich ist mit Java eine Datei zu Lese-/Schreibzwecken mit Java, voher mit Java in den Arbeitsspeicher zu laden.
Bzw. welche (Header) bietet denn solch eine Funktion um da was in den Arbeitsspeicher zu laden? Und wie würde das dann passieren? Gibt es dann eine Arbeitsspeicherreservierung? Wird ein Dateisystem eingerichtet mit Pfad-Adresse? Oder wird die Datei einfach in den Arbeitsspeicher geladen und der Stream ist dann der Zeiger? Also keine Pfad-Adresse?
Oder noch viel besser, wo bekomme ich Informationen, wie diese Funktion fubktioniert, wenn vorhanden?
Danke!
wurde doch schon im ersten post "gesagt": http://en.wikipedia.org/wiki/New_I/O
einfach mal bei google reinhauen
-
Ich kann in der New I/O Dokumentation aber nicht wirklich nachvollziehen wo da was in den Ram geladen wird. Im Quellcoe-Beispiel unter Regular expressions gibt es zwar die Bemerkung
Get the file's size and then map it into memory
aber der da drunter abgebildetete Aufruf rührt nur von einer FileInputStream(f).
Oder ist der Stream bereits die Funktion, die die Datei in den Arbeitsspeicher lädt oder getChannel()? Oder nein, ich glaube das macht MappedByteBuffer. Es wird eine Instanz mit dem Zeiger bb erstellt. Allerdings verstehe ich nicht ganz was da für eine Wandlung der Datei passiert. Und wenn ich dann die Datei aus dem Ram lesen will muss ich ja wieder auf bb zugreiffen und wieder zurückwandeln für einen FileOutputStream oder?
-
Hast du dich schon mit den Grundlagen Java's vertraut gemacht? "Arbeitsspeicherreservierung" klingt sehr nach C-Denken.
Ein simple, wahrscheinlich verbesserungswürdige Variante wäre:
// ... FileInputStream fis = new FileInputStream("input.dat"); ByteArrayOutputStream baos = new ByteArrayOutputStream(); int c = -1; while ((c = fis.read()) != -1) { baos.write(c); } byte[] data = baos.toByteArray(); // Datei in data geladen // ...
-
Wenn du eine Datei einliest ist sie im RAM, wo sollte sie denn sonst sein??
-
asfsafqetdg124 schrieb:
Wenn du eine Datei einliest ist sie im RAM, wo sollte sie denn sonst sein??
Soweit ich aber weis ist die Datei nicht gleich im Ram, wenn man sie in einer erstelten Instanz von Stream angibt. Soweit ich weis findet das Lesen und Schreiben dann immer noch direkt auf der HDD statt. Da ich aber Dauerlesen will und dazu immer wieder abwechselnd auch noch bei einer zweiten Datei, möchte ich die zwei Dateien zu erst vollständig in den Ram laden lassen. So das wenn er dann einen Lesezugriff auf die Datei macht, nicht auf das Original von der HDD liest sondern von der Kopie aus dem Ram.
Aber ich werde jetzt eh mal mit dem Quellcode-Beispiel experimentieren.
-
OMG
-
asfsafqetdg124 schrieb:
OMG
Und darf man fragen, was Sie damit sagen wollen?
-
jre schrieb:
wurde doch schon im ersten post "gesagt": http://en.wikipedia.org/wiki/New_I/O
einfach mal bei google reinhauenFür welche Anwendungsart ist der Code? Für eine die unter Kategorie Konsolen-Anwendung ist?
-
Hi,
ich habe zwar keine Ahnung von Java und kapiere auch nicht wirklich was du suchst aber kann es sein das eine RAM-Disk dass ist was du suchst? Oder vielleicht ein Cache für deine Dateien aus dem du dann lesen kannst als wäre es auf HDD?
Gruß Blue-Tec
-
blue-tec schrieb:
Hi,
ich habe zwar keine Ahnung von Java und kapiere auch nicht wirklich was du suchst aber kann es sein das eine RAM-Disk dass ist was du suchst? Oder vielleicht ein Cache für deine Dateien aus dem du dann lesen kannst als wäre es auf HDD?
Gruß Blue-Tec
Nene ich möchte schon sowas machen wie es in den Posts besprochen wird. Dateien zur berechneten Perfomance in den RAM laden.
Ich Frage auch nur deshalb weil ich besagten Code nicht umsetzten kann. Das müsste doch aber eigentlich auf Windows in Net Beans, typ Konsolenanwendung gehen, gehen? Soweit ich das sehe, startet der Prozess abhängig von der Parameterangabe.
-
Hi,
ich bin etwas verwirrt Nicol=Threadstarter?
Da ich aber Dauerlesen will und dazu immer wieder abwechselnd auch noch bei einer zweiten Datei, möchte ich die zwei Dateien zu erst vollständig in den Ram laden lassen. So das wenn er dann einen Lesezugriff auf die Datei macht, nicht auf das Original von der HDD liest sondern von der Kopie aus dem Ram.
Das kann man mit einer RAM-Disk oder anderen Dateicache machen, hier wird dann nicht die Mechanik der Festplatte strapaziert, obwohl man im Zeitalter von SSD nicht mehr automatisch von Mechanik ausgehen kann.
Ich verstehe diese Sätze überhaupt nicht:
Dateien zur berechneten Perfomance in den RAM laden.
Soweit ich das sehe, startet der Prozess abhängig von der Parameterangabe.
Gruß Blue-Tec