Willkommen |
|
myGully |
|
Links |
|
Forum |
|
|
|
 |
09.07.11, 01:47
|
#1
|
Anfänger
Registriert seit: Jun 2010
Beiträge: 45
Bedankt: 12
|
[JAVA] Zugriff auf Daten im Speicher
Hallo, nachdem ich nach ein paar erfolglosen Versuchen mit Google nichts gefunden habe, wollte ich fragen ob jemand hier vielleicht weiß, wie man das Problem angehen kann: Ich möchte eine Datei in mein Programm einlesen, entsprechent bearbeiten und dann von außerhalb des Programms auf die Daten im Speicher zugreifen. Ich möchte das bearbeitete Element nicht als neue Datei abspeichern, sondern es soll verloren gehen wenn Java geschlossen wird, also im bestfall nur im Ram vorhanden sein. Falls mit Java nicht möglich gehen auch andere Programmiersprachen als empfehlung (Bestenfalls C / C++ / C#). Bedanke mich im vorraus für jeden Tipp!
|
|
|
09.07.11, 07:51
|
#2
|
Banned
Registriert seit: Jun 2011
Beiträge: 62
Bedankt: 40
|
Betriebssystem???
|
|
|
09.07.11, 10:46
|
#3
|
Mitglied
Registriert seit: Aug 2009
Ort: void* (*wtf[])(void **);
Beiträge: 453
Bedankt: 137
|
für die meisten OS gilt:
Zitat:
Programme werden zwangsweise daran gehindert, versehentlich oder absichtlich auf den Speicherbereich anderer Programme zuzugreifen
|
aus [ Link nur für registrierte Mitglieder sichtbar. Bitte einloggen oder neu registrieren ]
evntl. kannst du das per [ Link nur für registrierte Mitglieder sichtbar. Bitte einloggen oder neu registrieren ] realisieren.
__________________
entropie erfordert keine wartung
|
|
|
09.07.11, 10:57
|
#4
|
Anfänger
Registriert seit: Jun 2010
Beiträge: 45
Bedankt: 12
|
@Pillewutz: Windows XP. Wenn es mit komplett mit Java realisierbar ist, dürfte doch aber eine Portierung (im bestfall) keine schwierigkeiten bereiten ?
@urga: Danke für die Links, das Programme nicht in den Speicherbereich anderer Programme zugreifen sollen/dürfen war mir schon klar, aber der Link mit dem Shared Memory ist gut, danke dafür.
|
|
|
09.07.11, 11:33
|
#5
|
is poking \\Device\\Beep
Registriert seit: May 2011
Beiträge: 201
Bedankt: 84
|
Hmm Direkter Speicherzugriff ist in Java nicht möglich, evtl mit ein paar schalternin der JVM aber das bezweifele ich, kenne mich mit der JVM aber auch nicht so aus.
Was du suchst ist eine RAMDISK, diese musst du mit demBetriebssystem erstellen,
ODER du speicherst deine Datei in einer Datenstruktur und führst jeden zugriff auf diese zurrück.
__________________
Meine Rechtschreibfehler dürft ihr gerne behalten.
------------------------------------------------------------
Füttere keine Trolle!->Also unterstütz auch nicht Appel.
|
|
|
10.07.11, 09:12
|
#6
|
Erfahrenes Mitglied
Registriert seit: Jul 2010
Beiträge: 489
Bedankt: 236
|
Du könntest auch einfach mit temporären Dateien arbeiten, welche du danach einfach löschst.
|
|
|
12.07.11, 03:42
|
#7
|
Anfänger
Registriert seit: Jul 2011
Beiträge: 1
Bedankt: 4
|
Zitat:
Zitat von Thelvan
Du könntest auch einfach mit temporären Dateien arbeiten, welche du danach einfach löschst.
|
Du hast die einzige richtige antwort gegeben...
|
|
|
12.07.11, 11:32
|
#8
|
Anfänger
Registriert seit: Jun 2010
Beiträge: 45
Bedankt: 12
|
@Thelvan: Natürlich könnte ich alles in temporären Dateien zwischenspeichern, aber auch wenn ich diese dann löschen lasse, kann ich mir ja nie sicher sein wann mein OS (in diesem Fall Windows) die Datei auch wirklich überschreibt. Und wie gesagt, ich würde die Datei ungern direkt auf der Festplatte speichern.
@dellmar: Genau genommen war Shared Memory die Antwort mit dem meisten Sinn, nur für Java halt wenig praktikabel.
|
|
|
12.07.11, 14:08
|
#9
|
Ist öfter hier
Registriert seit: Nov 2010
Beiträge: 198
Bedankt: 96
|
Zitat:
Zitat von Ccursed
@Thelvan: Natürlich könnte ich alles in temporären Dateien zwischenspeichern, aber auch wenn ich diese dann löschen lasse, kann ich mir ja nie sicher sein wann mein OS (in diesem Fall Windows) die Datei auch wirklich überschreibt.
|
Windows löscht die Datei, wenn Du ihm befiehlst, sie zu löschen. Natürlich können die Dateien idR noch wieder hergestellt werden, bis die verwendeten Bereiche auf der Platte tatsächlich neu beschrieben werden.
Wenn es Dir darum geht, dass die Daten nach dem Löschen nicht mehr wiederhergestellt werden können, wird's langsam knifflig. Windows könnte Dein Programm nämlich zwischendurch ausgelagert haben, dann liegt der komplette Speicherinhalt auf der Platte. Heisst, jetzt musst Du Dir zuerst mal Gedanken drüber machen, gegen welche Ausleseversuche Du dich schützen willst. Dann kannst Du Dich entscheiden, welche Technologien Du einsetzen kannst.
__________________
On a long enough timeline, the survival rate for everyone drops to zero. (Fight Club)
|
|
|
13.07.11, 12:43
|
#10
|
Anfänger
Registriert seit: Jun 2010
Beiträge: 45
Bedankt: 12
|
@Epeos: Ich sehe keinen unterschied zwischen meiner Aussage und deinem ersten Absatz.
|
|
|
13.07.11, 17:26
|
#11
|
is poking \\Device\\Beep
Registriert seit: May 2011
Beiträge: 201
Bedankt: 84
|
Ccursed,
shared memory macht nur sinn wenn 2 Prozesse ganz unkompliziert Daten miteinander austauschen sollen.
sonst ist shared memory nicht so besonders.
__________________
Meine Rechtschreibfehler dürft ihr gerne behalten.
------------------------------------------------------------
Füttere keine Trolle!->Also unterstütz auch nicht Appel.
|
|
|
13.07.11, 19:36
|
#12
|
Erfahrener Newbie
Registriert seit: Mar 2009
Beiträge: 154
Bedankt: 56
|
Hmm, mich würde interessieren, was genau Du machen willst. Soweit ich Dich verstanden habe, hast Du irgendwo eine Datei, die Du bearbeiten möchtest. Die Datei selbst möchtest Du löschen, aber die Änderung selbst möchtest Du von außerhalb bearbeiten?
Da stellt sich mir die Frage: Warum willst Du, dass ein Programm (auch ein Programm von Dir?) auf die Daten zugreifen kann? Kannst Du das nicht innerhalb der gleichen Anwendung machen?
Die Sicherheit, die Du möchtest, ist so eine Sache: IPC ist ein sehr komplexes Thema, und wenn Du nicht aufpasst, kannst Du damit riesige Scheunentore für Angriffe öffnen.
|
|
|
14.07.11, 09:37
|
#13
|
Anfänger
Registriert seit: Jun 2010
Beiträge: 45
Bedankt: 12
|
@Xalir Wirklich machen will ich damit nichts, ist eher ein Gedankenexperiment / wäre cool zu wissen.
Der genaue Ablauf sollte halt so aussehen: Ich habe eine Datei, sagen wir eine Textdatei mit Inhalt (egal was, hauptsache text), das Programm in dem die Datei geöffnet wird (Programm A), und das Programm das die bearbeiteten Dinge annimmt (Programm B). Ich öffne nun Prog. A und gebe ihm die Datei an, anschließend liest das Prog. A den Text aus und fängt an nach einem beliebigen Algorithmus den Text zu bearbeiten (nur eine Kopie, original soll erhalten bleiben), nach der Bearbeitung speichert es den bearbeiteten Text im Ram ab (sagen wir als String / Stringarray). Nun starten wir Prog. B, Prog. B überprüft ob Prog. A gerade ausgeführt wird, falls ja erfragt nun Prog. B bei Prog. A die Speicheradresse des Strings / Stringarrays und tut dann irgendwas damit, zum Beispiel eine Ausgabe (ja das könnte man auch direkt tun, aber es geht mir halt um die Datenübergabe).
Beim schließen von Prog A soll der Speicher natürlich wieder freigegeben werden / überschrieben werden, beim schließen von Prog B soll der Text weiterhin im Ram bestehen.
|
|
|
14.07.11, 09:51
|
#14
|
is poking \\Device\\Beep
Registriert seit: May 2011
Beiträge: 201
Bedankt: 84
|
ja kann man machen, aber wiso so?
Mit java hast du threads, und dein Szenario hat keine Notwendigketi für IPC,zumal IPC und Java sowiso so eine Sache ist, da du auf das OS direkt zugreifen musst.
Nimm lieber Threads, da haste dann auch einen gemeinsam nutzbaren Speicherbereich.
mfg
sirleo
__________________
Meine Rechtschreibfehler dürft ihr gerne behalten.
------------------------------------------------------------
Füttere keine Trolle!->Also unterstütz auch nicht Appel.
|
|
|
14.07.11, 12:07
|
#15
|
Ist öfter hier
Registriert seit: Nov 2010
Beiträge: 198
Bedankt: 96
|
Zitat:
Zitat von Ccursed
@Epeos: Ich sehe keinen unterschied zwischen meiner Aussage und deinem ersten Absatz.
|
Ich war mir nicht sicher, ob Dir der Unterschied zwischen "Löschen" und "Daten werden mit irgendwelchen anderen Daten überschrieben" klar ist. Schon beim Löschen wird der auf der Platte belegte Speicher frei gegeben. Da wollte ich nur noch mal drauf hinweisen.
Meiner Meinung nach macht es bei Deinem Gedankenexperiment mehr Sinn, in Deinem Programm A eine Methode zu implementieren, die den gewünschten Inhalt an Programm B zurück liefert. Programm B ruft dann diese Methode auf und bekommt die Daten sauber von A übergeben. Dann hat A die Kontrolle über die Daten und du musst in A nicht sicher stellen, dass B daran herummanipuliert.
__________________
On a long enough timeline, the survival rate for everyone drops to zero. (Fight Club)
|
|
|
14.07.11, 19:55
|
#16
|
Erfahrener Newbie
Registriert seit: Mar 2009
Beiträge: 154
Bedankt: 56
|
So wie Du Dir das vorstellst, wird es (für Dich) nahezu unmöglich sein.
Aber:
Du kannst öffentliche Schnittstellen bereitstellen, über die andere Programme auf Deine Funktionen zugreifen können. In .NET ist es möglich, die Zugriffe über signierte Assemblies zu steuern und zu verlangen, dass Programm B die gleiche Signierung wie Programm A hat, bevor es auf die Funktionen zugreifen darf. Wie es in anderen Sprachen wie Java ausschaut, kein Plan.
Andere Möglichkeiten, die zum Teil auch genannt wurden. sind Shared Memory, Named Pipes, Anonymous Pipes. Auch wieder nur für .NET gibt es die WCF, die zwar hauptsächlich für verteilte Anwendung sinnvoll ist, aber die man auch für solche Spielereien missbrauchen kann.
|
|
|
15.07.11, 00:32
|
#17
|
Anfänger
Registriert seit: Aug 2010
Beiträge: 5
Bedankt: 6
|
Datenaustausch zwischen zwei Programmen lässt sich doch relativ einfach über Sockets oder RPC (JSON bzw. XML) realisieren. Wobei RPC wohl schon genannt worden ist:
Zitat:
Zitat von Epeos
Meiner Meinung nach macht es bei Deinem Gedankenexperiment mehr Sinn, in Deinem Programm A eine Methode zu implementieren, die den gewünschten Inhalt an Programm B zurück liefert. Programm B ruft dann diese Methode auf und bekommt die Daten sauber von A übergeben. Dann hat A die Kontrolle über die Daten und du musst in A nicht sicher stellen, dass B daran herummanipuliert.
|
Die Grundlegenden Module zur Nutzung von Sockets sind in jeder modernen Programmiersprache Grundausstattung. Bei Python sind in der Standartbibliothek sogar Module für XML-RPC dabei
|
|
|
Forumregeln
|
Du kannst keine neue Themen eröffnen
Du kannst keine Antworten verfassen
Du kannst keine Anhänge posten
Du kannst nicht deine Beiträge editieren
HTML-Code ist Aus.
|
|
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:44 Uhr.
().
|