有没有一种方法可以使用Java 8中的Files.lines读取序列化的文件

jamesc1101

我正在尝试读取对象的序列化文件,但是我想尝试Java 8的功能性编程功能。但是,我一直收到MalformedInputException。显然,Files.lines读取Stream <String>而不是对象。Oracle文档中的Files类。)因此,格式错误的输入-它无法使用其使用的字符集来处理字符串的序列化字符。

我通常会使用ObjectInputStream,但是我想尝试一些新的东西。我在Java 8中缺少什么可以在lambdas上下文中使用流读取序列化文件的东西吗?

如果您有兴趣,请在尝试创建Stream <String>之前尝试一下(WordDefinitions.dat是一个序列化文件,其中包含来自我称为Definition的类的自定义数据类对象-基本上只是用于实验的字符串):

List<Definition> defsList =
    Files.lines(Paths.get("WordDefinitions.dat")) 
        .collect(Collectors.toList());

我什至尝试了一个显式的强制转换:

List<String> defsList =
    Files.lines(Paths.get("WordDefinitions.dat"))
        .map(item -> {
            Definition temp = (Definition)item;
            return temp.toString();
         })
         .collect(Collectors.toList());
霍尔格

没有将ObjectInputStreama转换为a的功能Stream<Object>,通常这些功能不能很好地配合使用。最值得注意的是,ObjectInputStream它没有提供任何方法来识别是否有更多对象可用,即是否已达到流的末尾。

不过,您仍然可以使用以下方法创建流:

public static Stream<Object> fromFile(File f) throws IOException {
    FileInputStream is=new FileInputStream(f);
    try {
        ObjectInputStream ois=new ObjectInputStream(is);
        return StreamSupport.stream(
        new Spliterators.AbstractSpliterator<Object>(Long.MAX_VALUE, Spliterator.ORDERED) {
            public boolean tryAdvance(Consumer<? super Object> action) {
                try {
                    action.accept(ois.readObject());
                    return true;
                } catch (IOException ex) {
                    throw new UncheckedIOException(ex);
                } catch (ClassNotFoundException ex) {
                    throw new NoClassDefFoundError(ex.getMessage());
                }
            }
            @Override public Spliterator<Object> trySplit() { return null; }
        }, false).onClose(() -> { try { ois.close(); }
            catch (IOException ex) { throw new UncheckedIOException(ex); } });
    } catch(Throwable t) {
        try(FileInputStream toClose=is) { throw t; }
    }
}

如前所述,该流不知道其对象数,因此需要显式使用limit来确保不会尝试读取结尾:

File f=File.createTempFile("ser", null);
try(FileOutputStream os=new FileOutputStream(f);
    ObjectOutputStream oos=new ObjectOutputStream(os)) {
    oos.writeObject("hello");
    oos.writeObject(42);
    oos.writeObject(Arrays.asList("X", "Y", "Z"));
    oos.flush();
}
System.out.println(f+": "+f.length()+" bytes");
try(Stream<Object> s=fromFile(f)) {
    s.limit(3).forEach(System.out::println);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

有没有一种方法可以使Rust中的(反)序列化枚举“变平”?

来自分类Dev

有没有一种方法可以使用〜指向Python中文件路径中的主目录?

来自分类Dev

有没有一种方法可以使用Tab键浏览文件中的位置以更改文本?

来自分类Dev

有没有一种方法可以使用sed或awk过滤压缩文件中的数据?

来自分类Dev

有没有一种方法可以使用Powershell更改文件中的内容部分?

来自分类Dev

有没有一种方法可以使ini文件中没有注释?

来自分类Dev

有没有一种方法可以使有序列表中的数字加粗?

来自分类Dev

有没有一种方法可以使Excel VBA中的查询列动态化?

来自分类Dev

有没有一种方法可以使用ClassLoader和getClass()方法从res文件夹中获取文件

来自分类Dev

有没有一种方法可以提供文件下载而无需从Java路径中读取文件?

来自分类Dev

有没有一种方法可以在AspNetUser表中反序列化ProtectedTicket?

来自分类Dev

有没有一种方法可以在AspNetUser表中反序列化ProtectedTicket?

来自分类Dev

有没有一种方法可以使用Matlab将多个文本文件中的列合并为单个文本文件?

来自分类Dev

有没有一种方法可以使用browserify在javascript组件中基于所需的CSS构建主CSS文件?

来自分类Dev

有没有一种方法可以使用BeautifulSoup将列表中的数据正确转换为CSV文件?

来自分类Dev

有没有一种方法可以使用字典的值作为数据帧的名称将csv文件导入到熊猫中?

来自分类Dev

有没有一种方法可以使用实体框架将表添加到SQL CE数据库文件中?

来自分类Dev

有没有一种方法可以在linq查询中参数化方法?

来自分类Dev

有没有一种方法可以kubectl应用目录中的每个文件?

来自分类Dev

有没有一种方法可以通过Java中的VFS设置远程文件夹的权限?

来自分类Dev

有没有一种方法可以在Swift中初始化数组以使其具有某些Type T的重复值

来自分类Dev

有没有一种方法可以使C#在同一行中读取整数和字符串?

来自分类Dev

有没有一种方法可以使Microsoft Excel 2010在文件打开对话框的默认文件列表中包括* .csv文件

来自分类Dev

有没有一种方法可以使Blend中的自定义着色器效果属性动画化?

来自分类Dev

有没有一种方法可以将文件设置为仅在GODOT中读取

来自分类Dev

有没有一种方法可以使用HashWithIndifferentAccess序列化ActiveRecord的JSON属性?

来自分类Dev

有没有一种方法可以使用并行处理从文件中读取大块并按顺序将字符串连接在一起?

来自分类Dev

有没有一种方法可以使用API在Azure Devops中列出拉请求文件(来自源分支)及其位置?还有使用C#的其他方法吗?

来自分类Dev

有没有一种方法可以使用 Android AWS SDK 从 Amazon S3 存储桶中读取文件上下文而无需下载文件?

Related 相关文章

  1. 1

    有没有一种方法可以使Rust中的(反)序列化枚举“变平”?

  2. 2

    有没有一种方法可以使用〜指向Python中文件路径中的主目录?

  3. 3

    有没有一种方法可以使用Tab键浏览文件中的位置以更改文本?

  4. 4

    有没有一种方法可以使用sed或awk过滤压缩文件中的数据?

  5. 5

    有没有一种方法可以使用Powershell更改文件中的内容部分?

  6. 6

    有没有一种方法可以使ini文件中没有注释?

  7. 7

    有没有一种方法可以使有序列表中的数字加粗?

  8. 8

    有没有一种方法可以使Excel VBA中的查询列动态化?

  9. 9

    有没有一种方法可以使用ClassLoader和getClass()方法从res文件夹中获取文件

  10. 10

    有没有一种方法可以提供文件下载而无需从Java路径中读取文件?

  11. 11

    有没有一种方法可以在AspNetUser表中反序列化ProtectedTicket?

  12. 12

    有没有一种方法可以在AspNetUser表中反序列化ProtectedTicket?

  13. 13

    有没有一种方法可以使用Matlab将多个文本文件中的列合并为单个文本文件?

  14. 14

    有没有一种方法可以使用browserify在javascript组件中基于所需的CSS构建主CSS文件?

  15. 15

    有没有一种方法可以使用BeautifulSoup将列表中的数据正确转换为CSV文件?

  16. 16

    有没有一种方法可以使用字典的值作为数据帧的名称将csv文件导入到熊猫中?

  17. 17

    有没有一种方法可以使用实体框架将表添加到SQL CE数据库文件中?

  18. 18

    有没有一种方法可以在linq查询中参数化方法?

  19. 19

    有没有一种方法可以kubectl应用目录中的每个文件?

  20. 20

    有没有一种方法可以通过Java中的VFS设置远程文件夹的权限?

  21. 21

    有没有一种方法可以在Swift中初始化数组以使其具有某些Type T的重复值

  22. 22

    有没有一种方法可以使C#在同一行中读取整数和字符串?

  23. 23

    有没有一种方法可以使Microsoft Excel 2010在文件打开对话框的默认文件列表中包括* .csv文件

  24. 24

    有没有一种方法可以使Blend中的自定义着色器效果属性动画化?

  25. 25

    有没有一种方法可以将文件设置为仅在GODOT中读取

  26. 26

    有没有一种方法可以使用HashWithIndifferentAccess序列化ActiveRecord的JSON属性?

  27. 27

    有没有一种方法可以使用并行处理从文件中读取大块并按顺序将字符串连接在一起?

  28. 28

    有没有一种方法可以使用API在Azure Devops中列出拉请求文件(来自源分支)及其位置?还有使用C#的其他方法吗?

  29. 29

    有没有一种方法可以使用 Android AWS SDK 从 Amazon S3 存储桶中读取文件上下文而无需下载文件?

热门标签

归档