将List <string>转换为流

新西兰詹姆斯

我的问题是我有一个充满记录的CSV文件,该文件当前正在通过开源CsvHelper.CsvReader.GetRecords<T>方法映射到强类型集合它被传递了一个基于GZIP的流,FileStream该流是从磁盘读取流的。

我怀疑CsvHelper该类与a一起使用时FileStream效率不是很高,因为此加载需要很长时间。我想先将原始文件有效地加载到内存中,然后再进行强类型映射。

不幸的是,映射类CsvHelper.CsvReader.GetRecords<T>仅接受流。我已经设法将原始数据加载到List<string>非常快的位置,但是现在我不知道如何“流化”该数据以传递给映射器。这是我能做的还是有其他解决方案?

到目前为止,我的代码是

var fileStream = ...
var gzipStream = new GZipStream(fileStream, CompressionMode.Decompress);
var entries = new List<string>();
using (var unzip = new StreamReader(gzipStream))
    while(!unzip.EndOfStream)
         entries.Add(unzip.ReadLine());

Parse(??);

        public IReadOnlyCollection<TRow> Parse(Stream stream)
        {
            Func<Stream> streamFactory = () => stream;
            var results = ParseCsvWithConfig <TRow>(streamFactory, _configuration).AsReadOnly();
       }

 public static IEnumerable<T> ParseCsvWithConfig<T>(Func<Stream> streamFactory, CsvConfiguration configuration)
        {
            using (var stream = streamFactory())
            {
                var streamReader = new StreamReader(stream);
                using (var csvReader = new CsvReader(streamReader, configuration ?? new CsvConfiguration()))
                {
                    return csvReader.GetRecords<T>().ToList();
                }
            }
        }
敦促

完全跳过列表:

var fileStream = ...
var gzipStream = new GZipStream(fileStream, CompressionMode.Decompress);
var memoryStream = new MemoryStream();

gzipStream.CopyTo(memoryStream);

// call Parse on memorystream

随意using在代码中的适当位置添加块。

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用Java流将List <String>转换为String

将List <HashMap <String,Object >>转换为流

Java-8流:将List <{String,List <String>}>转换为Map <String,List <String >>

Java-8流:将Map <String,List <List <DataType >>>转换为Map <String,List <DataType >>

使用Java 8流将List <E>转换为Map <String,List <String >>

如何使用流将Map <String,List <String >>转换为Set <String>?

使用流将String转换为两个String

flatMap()将LinkedList <String>的流转换为String的流

使用Java 8流API将List <A>转换为Map <String,List <A >>

使用Java 8流如何将Map <String,List <Something >>转换为Map <String,Integer>?

将 List<List<String>> 转换为 String[][]

使用Java 8流将long []转换为String

使用Java流将ArrayList <String>转换为Set <ScopeItem>

java流将POJO的列表转换为Map <String,List <POJO >>的Map

使用Java 8流API将List <Map <String,Object >>转换为Map <String,List <Map <String,Object >>>

将List <Integer>转换为List <String>

将List <dynamic>转换为List <string>

将 List<List<String>> 转换为 csv

将List <T>转换为List <string>

Powershell将String []转换为List <String>

Java 8 流:如何使用 groupingBy(.) 将 Map<String, List<Integer>> 转换为 Map<Integer, List<String>>

使用Java 8流,如何将Map <String,Map <String,List <Person >>>转换为Map <Integer,Map <String,Integer >>?

将 List<List<TextValue>> 转换为 List<Map<String, String>>

将List <Map <String,List <String >>>转换为String [] []

将List <List <object >>转换为List <List <string >>

Java:将List <Integer>转换为String

将枚举转换为List <string>

将Collection <Object>转换为List <String>

将String []转换为List <SelectList>