Java 对象序列化/反序列化和FileInputStream.available()

Java 对象序列化/反序列化和FileInputStream.available(),java,file,object,serialization,Java,File,Object,Serialization,我正在想一种方法来克服使用无限循环读取对象的坏习惯。我的算法涉及迭代检查 if(FileInputStream(“myFile.ser”).available()!=0)然后反序列化下一个对象。否则,我将关闭该文件 我想知道这样做是否正确 我已经阅读了这个问题的答案:不知道它们是否表示读取指针位于文件的末尾 换句话说,我可以信任文件输入流.available()来检查文件中还有多少数据可供读取吗?不,任何事情都不应该使用输入流.available()。该方法的定义(和实现)过于松散,没有任何意义

我正在想一种方法来克服使用无限循环读取对象的坏习惯。我的算法涉及迭代检查

if(FileInputStream(“myFile.ser”).available()!=0)
然后反序列化
下一个对象。否则,我将关闭该文件

我想知道这样做是否正确

我已经阅读了这个问题的答案:不知道它们是否表示读取指针位于文件的末尾


换句话说,我可以信任
文件输入流.available()
来检查文件中还有多少数据可供读取吗?

不,任何事情都不应该使用
输入流.available()
。该方法的定义(和实现)过于松散,没有任何意义


为什么无限循环是一个“坏习惯”?

plz check:)是的,文件与使用它的程序在同一台计算机上。如果你是一个多语言程序员,这是一个坏习惯。例如,如果你移动到C++这样的语言,你必须小心。在那里,它可能会导致机器崩溃!我确实想出了一个替代方案(需要花费O(33字节)的数据:将记录数保存到一个二进制文件中,如下所示:“1。)将记录数跨越的字节数保存到二进制文件“”2。)以这种方式将数字逐字节保存到二进制文件,您知道数字跨越多少字节,可以将其作为int数组读入,并将其处理为实际数字!这对2位的32位对象是很好的。该算法适用于数学。PoW(2,32)- 1对象(疯狂的对象数量;在达到这一点之前,序列化的东西可能会崩溃)!@ MikeWarren -无限循环在C++中的工作与java无关。