见了一个需要传输的类,如下
public class FileInfoRequest implements Serializable{ private String sessionID;
private byte[] fileContent;
public String getsessionID() {
return sessionID;
}
public void setsessionID(String sessionid) {
this.sessionID = sessionid;
}
public byte[] getFileContent() {
return fileContent;
}
public void setFileContent(byte[] fileContent) {
this.fileContent = fileContent;
}
}下面是写入类对象的代码:
sentFile=new File(filePath);
FileInputStream fis=new FileInputStream(sentFile);
byte[] b=new byte[64];
try {
fis=new FileInputStream(sentFile);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
request.setsessionID(sessionid);
while(fis.read(b,0,b.length)!=-1){
request.setFileContent(b);
}
system.out.println(request.getfileContent().length);
打印出来的filecontent 的长度总是为64, 请问各位高手, 怎样才能把文件全部写入类对象中?
public class FileInfoRequest implements Serializable{ private String sessionID;
private byte[] fileContent;
public String getsessionID() {
return sessionID;
}
public void setsessionID(String sessionid) {
this.sessionID = sessionid;
}
public byte[] getFileContent() {
return fileContent;
}
public void setFileContent(byte[] fileContent) {
this.fileContent = fileContent;
}
}下面是写入类对象的代码:
sentFile=new File(filePath);
FileInputStream fis=new FileInputStream(sentFile);
byte[] b=new byte[64];
try {
fis=new FileInputStream(sentFile);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
request.setsessionID(sessionid);
while(fis.read(b,0,b.length)!=-1){
request.setFileContent(b);
}
system.out.println(request.getfileContent().length);
打印出来的filecontent 的长度总是为64, 请问各位高手, 怎样才能把文件全部写入类对象中?
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
public class Test {
public static void main(String[] args) {
FileInfoRequest fileInfoRequest = new FileInfoRequest();
fileInfoRequest.setsessionID("testSessionId");
fileInfoRequest.setFileContent("testFileContent".getBytes());//创建测试对象,并初始化 writeObjectToFile(fileInfoRequest, "c:/test.txt");
fileInfoRequest = readObjectFromFile("c:/test.txt");
System.out.println(fileInfoRequest.getsessionID() + " "
+ new String(fileInfoRequest.getFileContent()));//读出对象,并输出
} /////////////////////////////////////////////////////////////////////////////////////////////////////////
private static <T> void writeObjectToFile(T t, String fileName) {// 将一个对象 写入文件,对象是可序列化的
if (t == null)
return;// 对象不存在 默认不写
ObjectOutputStream oos = null;
try {
oos = new ObjectOutputStream(new FileOutputStream(fileName));
oos.writeObject(t);
oos.writeObject(null);// //写入结束标志方便读取(如果不写入,在读取的时候无法定位读取结束);
} catch (Exception e) {
} finally {
try {
if (oos != null)
oos.close();
} catch (Exception e) {
}
}
} private static <T> T readObjectFromFile(String fileName) {// 从文件中读出一个对象
ObjectInputStream ois = null;
try {
ois = new ObjectInputStream(new FileInputStream(fileName));
T t = (T) ois.readObject();
return t; } catch (Exception e) {
} finally {
try {
if (ois != null)
ois.close();
} catch (Exception e) {
}
}
return null;
}
}class FileInfoRequest implements Serializable { private String sessionID;
private byte[] fileContent; public String getsessionID() {
return sessionID;
} public void setsessionID(String sessionid) {
this.sessionID = sessionid;
} public byte[] getFileContent() {
return fileContent;
} public void setFileContent(byte[] fileContent) {
this.fileContent = fileContent;
}}
在你原来的基础上,只需要作小小的改动就可以了
ByteArrayOutputStream bos = new ByteArrayOutputStream(); //用于保存所有的字节
int len;
while((len=fis.read(b))!=-1){
//request.setFileContent(b);
bos.write(b, 0, len); //每次写入读出的字节
}
request.setFileContent(bos.toByteArray()); //把读入的所有字节设置到fileContent
request.setFileContent(b);
}
改一下:
byte[] buff = new byte[sentFile.length()];
int len = 0;
int offset = 0;
while((len=fis.read(buff,offset,64))!=-1){
offset += len;
}
request.setFileContent(buff);