需要把字节数组byte[] buf= {1,23,4,0,3} 通过 类ReadInputRegistersRequest的 writeData(DataOutput dout)方法 输出 ,实例化一个dataoutput对象dout;
dout.write(buf),可以实现!
可是如何new DataOutput 的对象了?尝试:
private DataOutputStream dout;
dout.write(buf);
却报了空指针错误.

解决方案 »

  1.   

    传一个DataOutput的实现包装类啊!!!!!!
      

  2.   

    你只声明了DataOutputStream的引用,还没有实例化,就调用了write方法,当然是空指针~
      

  3.   

    是的 ,我就定义了 
    private DataOutputStream dout; 
    dout.write(buf); 
    ReadInputRegistersRequest. writeData(dout);但是dout.write(buf); 的时候报空指针错误 
    我不知道如何new DataOutputStream  对象!!!!!!
      

  4.   

    DataOutputStream
    创建一个这个的实例吧
    DataOutput 这是个接口,创建子类的实例对象就行了,查查API
      

  5.   

    所以我想实例化 DataOutputStream  ,可是怎么写了 
    DataOutputStream  dout = new DataOutputStream();是不正确的
    DataOutputStream  dout = new DataOutputStream(null);也不行
    这个类到底怎样实例化?
      

  6.   

    在网上找了该类的实例化例子:
    OutputStream out = new DataOutputStream(new FileOutputStream("test.txt")); 
    难道 我还要新出来个 new FileOutputStream("test.txt")对象?
     
      

  7.   

    OutputStream os = null;
    DataOutputStream dos = new DataOutputStream(os);
      

  8.   

    难道需要我把btye[] buf 写入文件test.txt 中再通过 
    OutputStream out = new DataOutputStream(new FileOutputStream("test.txt")) 
    哪位能够指点下!!!!!谢谢
      

  9.   


    FileOutputStream fot = new FileOutputStream(String, boolean);
    OutputStream os = new DataOutputStream(fot);
    DataOutputStream dos = new DataOutputStream(os);
      

  10.   

    还是空指针错误.......
    Exception in thread "main" java.lang.NullPointerException
    at java.io.DataOutputStream.write(Unknown Source)
    at java.io.FilterOutputStream.write(Unknown Source)
    at test.ttt.main(ttt.java:17)
    import java.io.DataOutputStream;
    import java.io.IOException;
    import java.io.OutputStream;public class ttt {
        public static void main(String[] arg){
         OutputStream os = null;
            DataOutputStream dos ;
         byte[] uu = {1,3,4,5,34,0,4};
         dos = new DataOutputStream(os);
         try {
    dos.write(uu);
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
        }  
    }
      

  11.   


    看api啊,DataOutputStream的构造函数需要一个OutputStream做参数,OutputStream是一个抽象类,自己不能实例化,所以要传一个它的子类做参数,比如FileOutputStream,PipedOutputStream等,这个就看你的实际需要啦,楼主找本讲java基础的书好好看看~
      

  12.   

    恩,是应该看看java基础,谢谢您的建议;
    我的需求就是就是简单的 把 字节数组写入 DataOutputStream 的对象中, 而在此要实例比如:OutputStream out = new DataOutputStream(new FileOutputStream("test.txt")) 不知道new FileOutputStream("test.txt"),做什么用,test.txt 我并不需要在此读或写什么.....
      

  13.   

    上面都是按照你要的构造的
    直接给你输入 输出的吧,自己参考。
    DataInputStream in5 = new DataInputStream(new BufferedInputStream(new FileInputStream("xxx.txt")));
    DataOutputStream out = new DataOutputStream(new BufferedOutputStream(new FileOutputStre("xxx.txt")));
    我是BufferedReader BufferedWriter用的比较多。
      

  14.   

    这是我的一个接口,问题就是如开始,不知道如何实例化DataOutputStreamimport java.io.DataInputStream;
    import java.io.DataOutputStream;
    import java.io.IOException;
    import java.io.OutputStream;import net.wimpi.modbus.ModbusCoupler;
    import net.wimpi.modbus.ModbusException;
    import net.wimpi.modbus.ModbusIOException;
    import net.wimpi.modbus.ModbusSlaveException;
    import net.wimpi.modbus.io.ModbusSerialTransaction;
    import net.wimpi.modbus.msg.ReadInputRegistersRequest;
    import net.wimpi.modbus.msg.ReadInputRegistersResponse;
    import net.wimpi.modbus.net.SerialConnection;
    import net.wimpi.modbus.util.SerialParameters;import org.apache.log4j.Logger;import util.Constant;
    import db.AccessConfig;public class SerialMaster implements Runnable { public static final Logger logger = Logger.getLogger(SerialMaster.class);
    public static SerialMaster serialMaster = null;
    private SerialConnection con = null; // the connection
    private ModbusSerialTransaction trans = null; // the transaction
    private ReadInputRegistersRequest req = null; // the request
    private ReadInputRegistersResponse res = null; // the response
    private SerialParameters params = null;
    private AccessConfig serialConfig = null;

    /* Variables for storing the parameters */
    private String portname = null; // the name of the serial port to be used
    private int unitid = 0; // the unit identifier we will be talking to
    private int ref = 0; // the reference, where to start reading from
    private int count = 0; // the count of IR's to read
    //!!!!!!!下面
    private DataOutputStream dout = new DataOutputStream(null); public static SerialMaster getInstance() {
    if (serialMaster == null) {
    serialMaster = new SerialMaster();
    }
    return serialMaster;
    } public void run() { serialConfig = new AccessConfig(Constant.CONFIG_DIR
    + "commConfig.properties"); // Setup the parameters
    ModbusCoupler.getReference().setUnitID(Integer.parseInt(serialConfig.getConfigValue("serial.portNo"))); // Setup serial parameters
    SerialParameters params = new SerialParameters();
    params.setPortName(serialConfig.getConfigValue("serial.portName"));
    params.setBaudRate(Integer.parseInt(serialConfig.getConfigValue("serial.baudrate")));
    params.setDatabits(Integer.parseInt(serialConfig.getConfigValue("serial.databit")));
    params.setParity(serialConfig.getConfigValue("serial.parity"));
    params.setStopbits(Integer.parseInt(serialConfig.getConfigValue("serial.stopbit")));
    params.setEncoding(serialConfig.getConfigValue("serial.Encoding"));
    params.setEcho(false);

    // // Open the connection
    con = new SerialConnection(params);
    try {
    con.open();
    } catch (Exception e) {
    e.printStackTrace();
    logger.error("串口连接失败.....");
    }
    }

    public void  write(int unitid,int ref,int count,byte[] buff) throws IOException {

    //        *************问题在此,报空指针错误,但是我又不知道该如何实例化一个
    dout.write(buff);
    // Prepare a request
    req = new ReadInputRegistersRequest(ref, count);
    req.setUnitID(unitid);
    req.setHeadless();

          //TODO 在req里写发送消息 ???? req.writeData(DataOutput arg0);
    req.writeData(dout);
    // ReadInputRegistersRequest writeData(DataOutput arg0)

    // Prepare a transaction
    trans = new ModbusSerialTransaction(con);
    trans.setRequest(req); try {
    trans.execute();

    } catch (ModbusIOException e) {
    e.printStackTrace();
    logger.error("消息I/O读写失败.....");
    } catch (ModbusSlaveException e) {
    e.printStackTrace();
    logger.error("Slave端异常.....");
    } catch (ModbusException e) {
    e.printStackTrace();
    logger.error("其他异常.....");
    }
    } public void serialClose() {
    // Close the connection
    con.close();
    }


    public static void main(String[] arg){

    new Thread(SerialMaster.getInstance()).start();

    byte[] buff = {0,0,18,52,1,2,0,11};

    try {

    SerialMaster.getInstance().write(1,Integer.parseInt("2000", 16),4,buff);

    } catch (NumberFormatException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    SerialMaster.getInstance().serialClose();

    }}
      

  15.   

    在此我需要把我处理得到的消息:一个字节数组byte[] buf 做如下处理
    req.writeData(DataOutput dout);封装的做了如下处理  public void writeData(DataOutput dout)
          throws IOException {
        dout.writeShort(m_Reference);
        dout.writeShort(m_WordCount);
      }而我得到的byte[] buf也只是希望能
    dout.writeShort(buf);
    所以需要实例化 DataOutput dout!!!!!!