# DataInputStream "überlisten"



## Fohnbit (11. Mrz 2017)

Hallo,

ich habe eine Codevorlage die Daten von einem seriellen Port empfängt:

```
// private final SerialTransceiver serialTransceiver = null;
private DataOutputStream os = null;
private DataInputStream is = null;
...
serialTransceiver.open();
os = serialTransceiver.getOutputStream();
is = serialTransceiver.getInputStream();
```

Nun habe ich aber die zu sendenden und empfangenen Daten in einer eigenen Methode.
Ich muss dem vorliegenden Code also überlisten und ihm statt die Daten einer seriellen Schnittstelle aus meiner Methoden zukommen lassen.

Das senden ist einfach, da ich statt an die serielle Schnittstelle, die Daten einfach meiner Methode übergebe.

Das empfangen ist mein Problem:

```
while (true) {
            if (is.available() > 0) {

                int numBytesRead = is.read(inputBuffer, numBytesReadTotal, MAX_MESSAGE_SIZE - numBytesReadTotal);

                numBytesReadTotal += numBytesRead;

                if (messageLength == -1) {
```

An vielen Stellen im Programm wartet die Klasse auf einkommende Daten über die Variable "is".
Ich kommentiere den "serialTransceiver" überall aus und muss dann über meine Methode die Variable is befüllen.

Wie kann ich aber mein byte Array in die is schreiben, so das die andere Klasse denkt, diese kommen von der seriellen Schnittstelle.

Könnte man die Variable "is" abändern zu einem anderen Datentype?

Danke!


----------



## Fohnbit (11. Mrz 2017)

Idee:
Ich schreibe in meiner Methode, die die Daten bereithält, mit:

```
// byte[] value haltet die Daten bereit
myClass.is = new DataInputStream(new ByteArrayInputStream(value));
```

Aber wie muss ich die Variable "is" in der Klasse "myClass" richtig instanzieren? Alle mir bekannten beziehen sich auf eine Fileangabe.

Danke!


----------



## Meniskusschaden (11. Mrz 2017)

Kannst du nicht einfach die bereits vorhandene Variable is wie im vorigen Post initialisieren? Dann müsstest du doch eigentlich gar nichts mehr ändern. Alternativ könntest du vielleicht DataInputStream erweitern und is mit einer Instanz davon initialisieren.


----------

