gpt4 book ai didi

java - 修改InputStream并将其转换为Outputstream

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

我正在开发一个程序,我在其中接收一个 XML 文件作为输入流。我必须进行一些更改,然后将其作为 OutputStream 返回。

这是我的代码:

public void execute (InputStream xmlEntrada, OutputStream xmlSalida) {

SAXBuilder saxBuilder = new SAXBuilder();
Document document;

String idDocCobro, idCobro;
String sociedad, ejercicio, numDocCobro;

try {

document = saxBuilder.build(xmlEntrada);

Element raiz = document.getRootElement();

List piDocCobros = raiz.getChildren("Pagos");

for (int i = 0; i < piDocCobros.size(); i++) {

Element nodePiDocCobros = (Element) piDocCobros.get(i);

sociedad = nodePiDocCobros.getChildText("Sociedad");
ejercicio = nodePiDocCobros.getChildText("Ejercicio");
numDocCobro = nodePiDocCobros.getChildText("NumDocumentoCobro");

idDocCobro = sociedad + ejercicio + numDocCobro + System.currentTimeMillis();

nodePiDocCobros.getChild("iddoccobro").setText(idDocCobro);

List piCobros = nodePiDocCobros.getChildren("Pago");

for (int y = 0; y < piCobros.size(); y++) {

Element nodePiCobros = (Element) piCobros.get(y);

nodePiCobros.getChild("iddoccobro").setText(idDocCobro);

idCobro = numDocCobro + System.currentTimeMillis();

nodePiCobros.getChild("idcobro").setText(idCobro);

List piDocumentosRel = nodePiCobros.getChild("DocumentosRelacionados").getChildren("DocumentoRelacionado");

for (int z = 0; z < piDocumentosRel.size(); z++) {

Element nodePiDocumentosRel = (Element) piDocumentosRel.get(z);

nodePiDocumentosRel.getChild("idcobro").setText(idCobro);

}

}
}

copy(xmlEntrada, xmlSalida);

} catch (JDOMException | IOException e) {
System.out.println(e.toString());
}
}

public static void copy(InputStream in, OutputStream out) throws IOException {

byte[] buffer = new byte[1024];
while (true) {
int bytesRead = in.read(buffer);
if (bytesRead == -1){
break;
}
out.write(buffer, 0, bytesRead);
}
}

我的问题是,当我尝试读取函数 copy 中的 XML 时,因为流已经关闭,所以我收到异常。当我在程序开头使用 saxBuilder.build 语句时,流会自行关闭。我无法将之前的文本保存在 byte[] 变量中,因为我会在程序期间修改它。

有什么想法吗?

提前非常感谢! :)

最佳答案

您读取的InputStream不是包含您所做修改的对象。您的修改位于 Document 对象内部。

这就是您需要发送到 OutputStream 的内容。

关于java - 修改InputStream并将其转换为Outputstream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51172137/

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