需要把字节数组byte[] buf= {1,23,4,0,3} 通过 类ReadInputRegistersRequest的 writeData(DataOutput dout)方法 输出 ,实例化一个dataoutput对象dout;
dout.write(buf),可以实现!
可是如何new DataOutput 的对象了?尝试:
private DataOutputStream dout;
dout.write(buf);
却报了空指针错误.
dout.write(buf),可以实现!
可是如何new DataOutput 的对象了?尝试:
private DataOutputStream dout;
dout.write(buf);
却报了空指针错误.
private DataOutputStream dout;
dout.write(buf);
ReadInputRegistersRequest. writeData(dout);但是dout.write(buf); 的时候报空指针错误
我不知道如何new DataOutputStream 对象!!!!!!
创建一个这个的实例吧
DataOutput 这是个接口,创建子类的实例对象就行了,查查API
DataOutputStream dout = new DataOutputStream();是不正确的
DataOutputStream dout = new DataOutputStream(null);也不行
这个类到底怎样实例化?
OutputStream out = new DataOutputStream(new FileOutputStream("test.txt"));
难道 我还要新出来个 new FileOutputStream("test.txt")对象?
DataOutputStream dos = new DataOutputStream(os);
OutputStream out = new DataOutputStream(new FileOutputStream("test.txt"))
哪位能够指点下!!!!!谢谢
FileOutputStream fot = new FileOutputStream(String, boolean);
OutputStream os = new DataOutputStream(fot);
DataOutputStream dos = new DataOutputStream(os);
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();
}
}
}
看api啊,DataOutputStream的构造函数需要一个OutputStream做参数,OutputStream是一个抽象类,自己不能实例化,所以要传一个它的子类做参数,比如FileOutputStream,PipedOutputStream等,这个就看你的实际需要啦,楼主找本讲java基础的书好好看看~
我的需求就是就是简单的 把 字节数组写入 DataOutputStream 的对象中, 而在此要实例比如:OutputStream out = new DataOutputStream(new FileOutputStream("test.txt")) 不知道new FileOutputStream("test.txt"),做什么用,test.txt 我并不需要在此读或写什么.....
直接给你输入 输出的吧,自己参考。
DataInputStream in5 = new DataInputStream(new BufferedInputStream(new FileInputStream("xxx.txt")));
DataOutputStream out = new DataOutputStream(new BufferedOutputStream(new FileOutputStre("xxx.txt")));
我是BufferedReader BufferedWriter用的比较多。
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();
}}
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!!!!!!