Bitoperation

Status
Nicht offen für weitere Antworten.

l00P

Bekanntes Mitglied
hallo zusammen!

ich will in einer datei ein byte bitweise setzen.
Beispiel:

00000001

Also in der datei verbrauche ich ein byte speicherplatz. Wie geht sowas??

danke schomal.
 
G

Guest

Gast
Viielicht gibt es auch ne eleganterere Möglichkeit, aber ich würde einfach das Byte einlesen.

Code:
RandomAccesFile rafile = new RandomAccesFile(new File("PFAD"), "rw");
int zeichen = rafile.read();


dann einfach die Zahl in eine Dualzahl umwandeln.
Anschließend das Bit dazu addiern oder löschen.

Züruck wandeln und anschließend wieder reinschreiben.

Code:
rafile.write(zeichen);
rafile.close:

UND FERTIG. :applaus:
 

l00P

Bekanntes Mitglied
hmmm, da gibts eine Klasse BitSet von java.util aber ich komm nicht drauf wie die funktioniert oder wie ich das ergebnis kontrollieren kann.

Eigentlich will ich in einem file an der position 50 in einem byte das 8.bit auf true setzen und alle anderen 7 bit sollten false also 0 sein...
 

The_S

Top Contributor
l00P hat gesagt.:
Eigentlich will ich in einem file an der position 50 in einem byte das 8.bit auf true setzen und alle anderen 7 bit sollten false also 0 sein...

Öhm, die Datei auslesen, das 50. Byte durch int 1 ersetzen und wieder zurückschreiben.

Darf man fragen für was du das benötigst?
 

l00P

Bekanntes Mitglied
so einfach? leuchtet mir ein...

in dieser Datei sind verschiedene flags gesetzt eben jeweils nur ein bit demnach sind in einem byte 8 zustände bzw. flags kodiert.

danke
 

l00P

Bekanntes Mitglied
.. da fällt mir ein: ein int besetzt doch 4 bytes, ich darf aber nur ein byte schreiben?!?
 

The_S

Top Contributor
Code:
public class BitEdit {

	public void changeByte(File source, File target, int bytePos, int bufferSize, byte replace) throws FileNotFoundException, IOException{
		
		BufferedInputStream bis = new BufferedInputStream(new FileInputStream(source));
		BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(target));
		byte[] beforePos = new byte[bytePos];
		byte[] buffer = new byte[bufferSize];
		bis.read(beforePos);
		beforePos[bytePos - 1] = replace;
		bos.write(beforePos);
		while ((bis.read(buffer)) != -1) {
			bos.write(buffer);
		}
		bos.close();
		bis.close();
	}

    public static void main(String[] args) throws IOException{
    	
    	new BitEdit().changeByte(new File("C:\\blub.txt"), new File("C:\\blub2.txt"), 50, 1024, (byte)1);
    }   
}
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben