2015-12-15 3 views
2

Я хочу записать некоторые шестнадцатеричные данные в последовательный порт и прочитать некоторые данные. У меня проблема в чтении (ничего не читает) может кто-то помочь ???Последовательный порт Java, читающий шестнадцатеричные значения

import java.io.BufferedOutputStream; 
import java.io.BufferedReader; 
import java.io.DataInputStream; 
import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.util.Map; 

public class Test { 
    public static void main(String[] args) throws IOException { 
     char c='s'; 
     ProcessBuilder builder = new ProcessBuilder("c:\\windows\\system32\\mode.com", "portname", 
      "baud=115200", "parity=n", "data=8","stop=1"); 
     Map<String, String> environ = builder.environment(); 
     String portname="com6"; 
     final Process process = builder.start(); 
     String x=""; 
     byte data[] = {(byte)0xF5, (byte)0xfa, (byte)0x01, (byte)0x01, (byte)0x00, (byte)0x00, (byte)0xfe, (byte)0x0f}; 
     FileOutputStream fos = new FileOutputStream(portname); 
     BufferedOutputStream bos = new BufferedOutputStream(fos); 
     fos.flush(); 
     fos.write(data); 
     fos.close(); 
     bos.close(); 
     FileInputStream fstream1 = new FileInputStream(portname); 
     DataInputStream in = new DataInputStream(fstream1); 
     BufferedReader br = new BufferedReader(new InputStreamReader(in)); 
     int n = 0; 
     while ((n =(char) in.read()) !=-1){ 
      System.out.println((char)fstream1.read()); 
     } 
    } 
} 
+1

https://code.google.com/p/java-simple-serial-connector/ – VirtualTroll

+1

Почему бы не использовать последовательную библиотеку java, такую ​​как jSSC, RxTx или xidobi? – Chriss

ответ

0

Вы передаете строку «portname» istead переменной portname. Смотрите следующие изменения кода:

String portname="com6"; //Move it here 
ProcessBuilder builder = new ProcessBuilder("c:\\windows\\system32\\mode.com", 
      portname, //instead of "portname" 
      "baud=115200", "parity=n", "data=8","stop=1"); 
Map<String, String> environ = builder.environment(); 

После этого изменения, у меня был системный блок на чтение() - потому что у меня нет ничего, подключенного к этому порту.

Вы читаете от оба потока - и таким образом вы пропускаете байты. Попробуйте сначала с использованием самых простых потоков:

try{ 
    FileOutputStream fos = new FileOutputStream(portname); 
    fos.write(data); 
    fos.flush(); 
    fos.close(); 

    FileInputStream fstream1 = new FileInputStream(portname); 
    int n = in.read(); 
    while (n != -1){ 
     System.out.println(n); 
     n = in.read(); 
    } 
    System.out.println("Reading ended"); 
} catch(Exception e) { 
    e.printStackTrace(); 
} 

Это должно хотя бы вернуть то, что вы написали.

+0

, если я заменю System.out.println ((char) fstream1.read()); – javac31

+0

с System.out.println (n); он снова ничего не читает :-( – javac31

+0

см. мое редактирование - я удалил большую часть ваших потоков – Jan

Смежные вопросы