首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ToArray()函数限制

ToArray()函数限制
EN

Stack Overflow用户
提问于 2017-02-27 07:23:33
回答 4查看 440关注 0票数 2

我使用.ToArray()方法将我的字符串转换为char数组,该数组的大小保持了char[] buffer = new char[1000000];,但当我使用以下代码时:

代码语言:javascript
复制
using (StreamReader streamReader = new StreamReader(path1))
{
    buffer = streamReader.ReadToEnd().ToCharArray();
}
// buffer = result.ToArray();
threadfunc(data_path1);

缓冲区的大小被固定为8190,即使它在使用.ToCharArray().ToArray()之后也没有读取整个文件。.ToCharArray().ToArray()有大小限制的原因是什么?就像我不使用这个函数一样,我能够以字符串格式读取整个文件,但是当试图通过使用这个函数将其转换为char数组时,我会受到大小限制。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-02-27 07:40:51

ToCharArray()返回数组的新实例。因此,您的buffer将引用新实例,即ReadToEnd返回的数据大小。

如果要保持buffer大小不变,只需向已存在的数组中添加新数组即可

代码语言:javascript
复制
char[] buffer = new char[1000000];
using (StreamReader streamReader = new StreamReader(path1))
{
    var tempArray = streamReader.ReadToEnd().ToCharArray();
    tempArray.CopyTo(buffer, 0);
}

如果您只想使用结果数组-您不需要“预测”数组的大小-只需使用返回的数组

代码语言:javascript
复制
public char[] GetArrayFromFile(string pathToFile)
{
    using (StreamReader streamReader = new StreamReader(path1))
    {
        var data = streamReader.ReadToEnd();
    }
    return data.ToCharArray();
}    

var arrayFromFile = GetArrayFromFile(@"..\path.file");
票数 1
EN

Stack Overflow用户

发布于 2017-02-27 07:45:00

我猜问题是,在调用ToCharArray()之前,从读到尾应该完成。这可能对你有帮助。您不需要定义缓冲区,因为ToCharArray()创建了char[]本身的一个新实例。

代码语言:javascript
复制
string content;
using (StreamReader streamReader = new StreamReader(path1))
{
    content = streamReader.ReadToEnd();
}
var buffer = content.ToCharArray();
票数 2
EN

Stack Overflow用户

发布于 2017-02-27 07:44:20

您可能使用了不正确的编码。默认情况下,StreamReader(字符串)使用UTF8编码:

完整的文件路径由path参数指定。此构造函数将编码初始化为UTF8Encoding,缓冲区大小初始化为1024字节。

除非您有特定的需要,否则不要预先分配缓冲区大小。

如果文件采用ASCII格式,则需要更新StreamReader构造函数:

代码语言:javascript
复制
char[] buffer = null;

using (StreamReader streamReader = new StreamReader(path1, Encoding.ASCII))
{
    buffer = streamReader.ReadToEnd().ToCharArray();
}
// buffer = result.ToArray();
threadfunc(data_path1);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42479944

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档