问题序列化和反序列化的ArrayList [英] Problem serializing and deserializing ArrayList
本文介绍了问题序列化和反序列化的ArrayList的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
每当我试图序列文件出现错误:FileNotFound。不知道为什么。这是我的FileHelper code:
包org.stocktwits.helper;
进口java.io.ByteArrayInputStream中;
进口java.io.ByteArrayOutputStream中;
进口的java.io.File;
进口java.io.FileInputStream中;
进口java.io.FileOutputStream中;
进口java.io.IOException异常;
进口的java.io.InputStream;
进口java.io.ObjectInputStream中;
进口java.io.ObjectOutput中;
进口java.io.ObjectOutputStream中;
进口的java.util.ArrayList;
进口org.stocktwits.model.Quote;
公共类FileHelper {
//返回一个字节数组的文件的内容。
公共静态的byte [] getBytesFromFile(档案文件)抛出IOException异常{
InputStream的是=新的FileInputStream(文件);
//获取文件的大小
长长度= file.length();
//您不能创建使用长类型的数组。
//它需要一个int类型。
//之前转换成int类型,检查
//确保文件不大于Integer.MAX_VALUE。
如果(长度>为Integer.MAX_VALUE){
//文件过大
}
//创建字节数组来保存数据
字节[]字节=新字节[(INT)长]。
//读取的字节数
INT偏移= 0;
INT numRead = 0;
而(偏移< bytes.length
&功放;&安培; (numRead = is.read(字节,胶印,bytes.length偏移))> = 0){
胶印+ = numRead;
}
//确保所有字节都被读入
如果(偏移< bytes.length){
抛出新的IOException异常(无法完全读取文件+ file.getName());
}
//关闭输入流,并返回字节
is.close();
返回字节;
}
公共静态无效serializeQuotes(ArrayList中<报价>引号){
尝试 {
//序列化到一个文件
的ObjectOutput OUT =新的ObjectOutputStream(新的FileOutputStream(quotes.ser));
out.writeObject(引号);
out.close();
//序列化到一个字节数组
ByteArrayOutputStream BOS =新ByteArrayOutputStream();
OUT =新的ObjectOutputStream(BOS);
out.writeObject(引号);
out.close();
//获取序列化对象的字节
// byte []的BUF = bos.toByteArray();
}赶上(IOException异常E){
的System.out.println(E);
}
}
@燮pressWarnings(未登记)
公共静态无效deserializeQuotes(ArrayList中<报价>引号){
尝试 {
//从文件反序列化
档案文件=新的文件(quotes.ser);
ObjectInputStream中的=新的ObjectInputStream(新的FileInputStream(文件));
//反序列化对象
报价=(ArrayList的<报价>)in.readObject();
附寄();
//获取一些字节数组数据
字节[]字节= FileHelper.getBytesFromFile(文件);
//看到读入文件到一个字节数组此方法的实现
//从一个字节数组反序列化
在=新的ObjectInputStream(新ByteArrayInputStream的(字节));
报价=(ArrayList的<报价>)in.readObject();
附寄();
}赶上(ClassNotFoundException异常E){
的System.out.println(E);
}赶上(IOException异常E){
的System.out.println(E);
}
}
}
解决方案
我少code解决了这个问题:
私人无效serializeQuotes(){
FileOutputStream中FOS;
尝试 {
FOS = openFileOutput(Constants.FILENAME,Context.MODE_PRIVATE);
ObjectOutputStream的OOS =新的ObjectOutputStream(FOS);
oos.writeObject(引号);
oos.close();
}赶上(FileNotFoundException异常E){
e.printStackTrace();
}赶上(IOException异常E){
e.printStackTrace();
}
}
@燮pressWarnings(未登记)
私人无效deserializeQuotes(){
尝试{
的FileInputStream FIS = openFileInput(Constants.FILENAME);
ObjectInputStream的OIS =新的ObjectInputStream(FIS);
报价=(ArrayList的<报价>)ois.readObject();
}赶上(FileNotFoundException异常E){
e.printStackTrace();
}赶上(IOException异常E){
e.printStackTrace();
}赶上(ClassNotFoundException异常E){
e.printStackTrace();
}
}
BOOM SHAKA LAKA。
Anytime I try to serialize a file I get the error: FileNotFound. Not sure why. Here is my FileHelper code:
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);
}
}
}
解决方案
I solved it with less code:
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();
}
}
BOOM SHAKA LAKA.
这篇关于问题序列化和反序列化的ArrayList的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文