gpt4 book ai didi

java - 如何从动态创建的字符串数组中创建 datastore.Text 对象?

转载 作者:行者123 更新时间:2023-12-02 05:32:17 24 4
gpt4 key购买 nike

我正在为一个项目创建一个 Google App Engine 服务器,我在该项目中通过 HTTP POST 请求接收大量数据。

数据被分成行,每行 200 个字符。行数可以达到数百行,因此总共有数十到数千个字符。

我想要做的是将所有这些行连接到一个 Text 对象中,因为字符串的最大长度为 500 个字符,但 Text 对象可以大到 1MB。

这是我到目前为止的想法:

public void doPost(HttpServletRequest req, HttpServletResponse resp)
{
...

String[] audioSampleData = new String[numberOfLines];

for (int i = 0; i < numberOfLines; i++)
{
audioSampleData[i] = req.getReader().readLine();
}

com.google.appengine.api.datastore.Text textAudioSampleData = new
Text(audioSampleData[0] + audioSampleData[1] + ...);

...
}

但正如你所看到的,如果事先不知道行数,我不知道如何做到这一点。有没有办法让我迭代 Text 构造函数中的 String 索引?我似乎找不到任何相关信息。

值得注意的是,Text 对象在创建后就无法修改,并且它必须有一个 String 作为构造函数的参数。 (文档 here )

有什么办法吗?我需要一个 Text 对象中的 String 数组中的所有数据。

非常感谢!

最佳答案

这里有一些不同的方法来做到这一点。仅供引用,我只编译了这些,还没有运行它们。

选项 A:可能是三个中最简单的一个

public void doPost(HttpServletRequest req, HttpServletResponse resp) {
// change initialCapacity to reflect the likely final size
int initialCapacity = 1024;
StringBuilder builder = new StringBuilder(initialCapacity);

try {
BufferedReader reader = req.getReader();
int c;

while((c = reader.read()) != -1) {
builder.append(c);
}
} catch (IOException e) {
// your error handling here
}

String s = builder.toString();
Text text = new Text(s);

// etc etc.
}

选项 B: 这个方法一次转换一行,但如果内容实际上不是换行符分隔的,那么它将是一个非常大的单行。另外,当循环将每一行附加到 StringBuilder 时,请注意附加的字符串已删除了\n 和\r 字符。因此,如果您的目标是保留行终止符,那么这不是一个很好的选择。

public void doPost(HttpServletRequest req, HttpServletResponse resp) {
// change initialCapacity to reflect the likely final size
int initialCapacity = 1024;

StringBuilder builder = new StringBuilder(initialCapacity);

try {
BufferedReader reader = req.getReader();
String line = null;

while ((line = reader.readLine()) != null) {
builder.append(line);
}
} catch (IOException e) {
// your error handling here
}

String s = builder.toString();
Text text = new Text(s);
// etc etc.
}

选项 C: 该选项使用字符缓冲区从读取器中批量读取数据并将其写入字符串缓冲区。它还保留行终止字符。

public void doPost(HttpServletRequest req, HttpServletResponse resp) {
// change initialCapacity to reflect the likely final size
int initialCapacity = 1024;

StringBuilder builder = new StringBuilder(initialCapacity);

try {
BufferedReader reader = req.getReader();
char [] buffer = new char[1024];

int charsRead = 0;
do {
charsRead = reader.read(buffer, 0, buffer.length);
if (charsRead > 0) {
builder.append(buffer, 0, charsRead);
}
} while (charsRead != -1);
} catch (IOException e) {
// your error handling here
}

String s = builder.toString();
Text text = new Text(s);

// etc etc.
}

关于java - 如何从动态创建的字符串数组中创建 datastore.Text 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25415370/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com