见了一个需要传输的类,如下
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, 请问各位高手, 怎样才能把文件全部写入类对象中?

解决方案 »

  1.   

    import java.io.FileInputStream;
    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;
        }}
      

  2.   

    你只读入64个字节,每次setFileContent,这样每次fileContent就只有64个字节,因该把所有的字节读出来,再setFileContent
    在你原来的基础上,只需要作小小的改动就可以了
    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
      

  3.   

    while(fis.read(b,0,b.length)!=-1){
                    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);