代码之家  ›  专栏  ›  技术社区  ›  Sheehan Alam

序列化和反序列化ArrayList时出现问题

  •  2
  • Sheehan Alam  · 技术社区  · 15 年前

    每当我试图序列化一个文件时,都会得到错误:fileNotFound。不知道为什么。这是我的FileHelper代码:

    package org.stocktwits.helper;
    
    import java.io.ByteArrayInputStream;
    import java.io.ByteArrayOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutput;
    import java.io.ObjectOutputStream;
    import java.util.ArrayList;
    
    import org.stocktwits.model.Quote;
    
    public class FileHelper {
        // Returns the contents of the file in a byte array.
        public static byte[] getBytesFromFile(File file) throws IOException {
            InputStream is = new FileInputStream(file);
    
            // Get the size of the file
            long length = file.length();
    
            // You cannot create an array using a long type.
            // It needs to be an int type.
            // Before converting to an int type, check
            // to ensure that file is not larger than Integer.MAX_VALUE.
            if (length > Integer.MAX_VALUE) {
                // File is too large
            }
    
            // Create the byte array to hold the data
            byte[] bytes = new byte[(int)length];
    
            // Read in the bytes
            int offset = 0;
            int numRead = 0;
            while (offset < bytes.length
                   && (numRead=is.read(bytes, offset, bytes.length-offset)) >= 0) {
                offset += numRead;
            }
    
            // Ensure all the bytes have been read in
            if (offset < bytes.length) {
                throw new IOException("Could not completely read file "+file.getName());
            }
    
            // Close the input stream and return bytes
            is.close();
            return bytes;
        }
    
        public static void serializeQuotes(ArrayList<Quote> quotes){
            try {
                // Serialize to a file
                ObjectOutput out = new ObjectOutputStream(new FileOutputStream("quotes.ser"));
                out.writeObject(quotes);
                out.close();
    
                // Serialize to a byte array
                ByteArrayOutputStream bos = new ByteArrayOutputStream() ;
                out = new ObjectOutputStream(bos) ;
                out.writeObject(quotes);
                out.close();
    
                // Get the bytes of the serialized object
                //byte[] buf = bos.toByteArray();
            } catch (IOException e) {
                System.out.println(e);
            }
        }
    
        @SuppressWarnings("unchecked")
        public static void deserializeQuotes(ArrayList<Quote> quotes){
            try {
                // Deserialize from a file
                File file = new File("quotes.ser");
                ObjectInputStream in = new ObjectInputStream(new FileInputStream(file));
                // Deserialize the object
                quotes = (ArrayList<Quote>) in.readObject();
                in.close();
    
                // Get some byte array data
                byte[] bytes = FileHelper.getBytesFromFile(file);
                // see Reading a File into a Byte Array for the implementation of this method
    
                // Deserialize from a byte array
                in = new ObjectInputStream(new ByteArrayInputStream(bytes));
                quotes = (ArrayList<Quote>) in.readObject();
                in.close();
            } catch (ClassNotFoundException e) {
                System.out.println(e);
            } catch (IOException e) {
                System.out.println(e);
            }
        }   
    }
    
    1 回复  |  直到 9 年前
        1
  •  8
  •   W.K.S    9 年前
    private void serializeQuotes(){
            FileOutputStream fos;
            try {
                fos = openFileOutput(Constants.FILENAME, Context.MODE_PRIVATE);
                ObjectOutputStream oos = new ObjectOutputStream(fos);
                oos.writeObject(quotes); 
                oos.close();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }catch(IOException e){
                e.printStackTrace();
            }
        }
    
        @SuppressWarnings("unchecked")
        private void deserializeQuotes(){
            try{
                FileInputStream fis = openFileInput(Constants.FILENAME);
                ObjectInputStream ois = new ObjectInputStream(fis);
                quotes = (ArrayList<Quote>) ois.readObject();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }catch(IOException e){
                e.printStackTrace();
            }catch(ClassNotFoundException e){
                e.printStackTrace();
            }
        }