myGully.com Boerse.SH - BOERSE.AM - BOERSE.IO - BOERSE.IM Boerse.BZ .TO Nachfolger
Zurück   myGully.com > Computer & Technik > Programmierung
Seite neu laden

[JAVA] Zugriff auf Daten im Speicher

Willkommen

myGully

Links

Forum

 
Antwort
Themen-Optionen Ansicht
Ungelesen 09.07.11, 01:47   #1
Ccursed
Anfänger
 
Registriert seit: Jun 2010
Beiträge: 45
Bedankt: 12
Ccursed ist noch neu hier! | 0 Respekt Punkte
Standard [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!
Ccursed ist offline   Mit Zitat antworten
Ungelesen 09.07.11, 07:51   #2
Pillewutz
Banned
 
Registriert seit: Jun 2011
Beiträge: 62
Bedankt: 40
Pillewutz ist noch neu hier! | 0 Respekt Punkte
Standard

Betriebssystem???
Pillewutz ist offline   Mit Zitat antworten
Ungelesen 09.07.11, 10:46   #3
urga
Mitglied
 
Benutzerbild von urga
 
Registriert seit: Aug 2009
Ort: void* (*wtf[])(void **);
Beiträge: 453
Bedankt: 137
urga ist noch neu hier! | 0 Respekt Punkte
Standard

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
urga ist offline   Mit Zitat antworten
Ungelesen 09.07.11, 10:57   #4
Ccursed
Anfänger
 
Registriert seit: Jun 2010
Beiträge: 45
Bedankt: 12
Ccursed ist noch neu hier! | 0 Respekt Punkte
Standard

@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.
Ccursed ist offline   Mit Zitat antworten
Ungelesen 09.07.11, 11:33   #5
sirleo
is poking \\Device\\Beep
 
Registriert seit: May 2011
Beiträge: 201
Bedankt: 84
sirleo ist noch neu hier! | 0 Respekt Punkte
Standard

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.
sirleo ist offline   Mit Zitat antworten
Ungelesen 10.07.11, 09:12   #6
Thelvan
Erfahrenes Mitglied
 
Registriert seit: Jul 2010
Beiträge: 489
Bedankt: 236
Thelvan erschlägt nachts Börsenmakler | 5269 Respekt PunkteThelvan erschlägt nachts Börsenmakler | 5269 Respekt PunkteThelvan erschlägt nachts Börsenmakler | 5269 Respekt PunkteThelvan erschlägt nachts Börsenmakler | 5269 Respekt PunkteThelvan erschlägt nachts Börsenmakler | 5269 Respekt PunkteThelvan erschlägt nachts Börsenmakler | 5269 Respekt PunkteThelvan erschlägt nachts Börsenmakler | 5269 Respekt PunkteThelvan erschlägt nachts Börsenmakler | 5269 Respekt PunkteThelvan erschlägt nachts Börsenmakler | 5269 Respekt PunkteThelvan erschlägt nachts Börsenmakler | 5269 Respekt PunkteThelvan erschlägt nachts Börsenmakler | 5269 Respekt Punkte
Standard

Du könntest auch einfach mit temporären Dateien arbeiten, welche du danach einfach löschst.
Thelvan ist offline   Mit Zitat antworten
Ungelesen 12.07.11, 03:42   #7
dellmar
Anfänger
 
Registriert seit: Jul 2011
Beiträge: 1
Bedankt: 4
dellmar ist noch neu hier! | 0 Respekt Punkte
Standard

Zitat:
Zitat von Thelvan Beitrag anzeigen
Du könntest auch einfach mit temporären Dateien arbeiten, welche du danach einfach löschst.
Du hast die einzige richtige antwort gegeben...
dellmar ist offline   Mit Zitat antworten
Ungelesen 12.07.11, 11:32   #8
Ccursed
Anfänger
 
Registriert seit: Jun 2010
Beiträge: 45
Bedankt: 12
Ccursed ist noch neu hier! | 0 Respekt Punkte
Standard

@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.
Ccursed ist offline   Mit Zitat antworten
Ungelesen 12.07.11, 14:08   #9
Epeos
Ist öfter hier
 
Benutzerbild von Epeos
 
Registriert seit: Nov 2010
Beiträge: 198
Bedankt: 96
Epeos ist noch neu hier! | 0 Respekt Punkte
Standard

Zitat:
Zitat von Ccursed Beitrag anzeigen
@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)
Epeos ist offline   Mit Zitat antworten
Ungelesen 13.07.11, 12:43   #10
Ccursed
Anfänger
 
Registriert seit: Jun 2010
Beiträge: 45
Bedankt: 12
Ccursed ist noch neu hier! | 0 Respekt Punkte
Standard

@Epeos: Ich sehe keinen unterschied zwischen meiner Aussage und deinem ersten Absatz.
Ccursed ist offline   Mit Zitat antworten
Ungelesen 13.07.11, 17:26   #11
sirleo
is poking \\Device\\Beep
 
Registriert seit: May 2011
Beiträge: 201
Bedankt: 84
sirleo ist noch neu hier! | 0 Respekt Punkte
Standard

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.
sirleo ist offline   Mit Zitat antworten
Ungelesen 13.07.11, 19:36   #12
Xalir
Erfahrener Newbie
 
Registriert seit: Mar 2009
Beiträge: 154
Bedankt: 56
Xalir ist noch neu hier! | 0 Respekt Punkte
Standard

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.
Xalir ist offline   Mit Zitat antworten
Ungelesen 14.07.11, 09:37   #13
Ccursed
Anfänger
 
Registriert seit: Jun 2010
Beiträge: 45
Bedankt: 12
Ccursed ist noch neu hier! | 0 Respekt Punkte
Standard

@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.
Ccursed ist offline   Mit Zitat antworten
Ungelesen 14.07.11, 09:51   #14
sirleo
is poking \\Device\\Beep
 
Registriert seit: May 2011
Beiträge: 201
Bedankt: 84
sirleo ist noch neu hier! | 0 Respekt Punkte
Standard

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.
sirleo ist offline   Mit Zitat antworten
Ungelesen 14.07.11, 12:07   #15
Epeos
Ist öfter hier
 
Benutzerbild von Epeos
 
Registriert seit: Nov 2010
Beiträge: 198
Bedankt: 96
Epeos ist noch neu hier! | 0 Respekt Punkte
Standard

Zitat:
Zitat von Ccursed Beitrag anzeigen
@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)
Epeos ist offline   Mit Zitat antworten
Ungelesen 14.07.11, 19:55   #16
Xalir
Erfahrener Newbie
 
Registriert seit: Mar 2009
Beiträge: 154
Bedankt: 56
Xalir ist noch neu hier! | 0 Respekt Punkte
Standard

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.
Xalir ist offline   Mit Zitat antworten
Ungelesen 15.07.11, 00:32   #17
nessily
Anfänger
 
Registriert seit: Aug 2010
Beiträge: 5
Bedankt: 6
nessily ist noch neu hier! | 0 Respekt Punkte
Standard

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 Beitrag anzeigen
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
nessily ist offline   Mit Zitat antworten
Antwort


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

BB code is An
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.

Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:44 Uhr.


Sitemap

().