将字符添加到BufferedInputStream java的末尾
我从MimeMessage收到输入流。在InputStream中,我要在末尾添加\r\n。\r\n 表示消息的结尾将字符添加到BufferedInputStream java的末尾,java,jakarta-mail,bufferedinputstream,Java,Jakarta Mail,Bufferedinputstream,我从MimeMessage收到输入流。在InputStream中,我要在末尾添加\r\n。\r\n 表示消息的结尾 请建议。只需将InputStream值存储在字符串中,然后将其添加到该字符串中: BufferedReader input; if(stream != null){ input = new BufferedReader(new InputStreamReader( stream)); String respo
请建议。只需将InputStream值存储在字符串中,然后将其添加到该字符串中:
BufferedReader input;
if(stream != null){
input = new BufferedReader(new InputStreamReader(
stream));
String responseLine = "";
String server_response = "";
try {
while (((responseLine = input.readLine()) != null) {
server_response = server_response + responseLine + "\r\n";
}
} catch (IOException e) {
}
server_response = server_response + "\r\n.\r\n";
}
我错过什么了吗?或者这就是您要求的?只需将InputStream值存储在字符串中,然后将其添加到该字符串中:
BufferedReader input;
if(stream != null){
input = new BufferedReader(new InputStreamReader(
stream));
String responseLine = "";
String server_response = "";
try {
while (((responseLine = input.readLine()) != null) {
server_response = server_response + responseLine + "\r\n";
}
} catch (IOException e) {
}
server_response = server_response + "\r\n.\r\n";
}
我错过什么了吗?或者这就是你想要的?你可以用
public class ConcatInputStream extends InputStream {
private final InputStream[] is;
private int last = 0;
ConcatInputStream(InputStream[] is) {
this.is = is;
}
public static InputStream of(InputStream... is) {
return new ConcatInputStream(is);
}
@Override
public int read(byte[] b, int off, int len) throws IOException {
for (; last < is.length; last++) {
int read = is[last].read(b, off, len);
if (read >= 0)
return read;
}
throw new EOFException();
}
@Override
public int read() throws IOException {
for (; last < is.length; last++) {
int read = is[last].read();
if (read >= 0)
return read;
}
throw new EOFException();
}
@Override
public int available() throws IOException {
long available = 0;
for(int i = last; i < is.length; i++)
available += is[i].available();
return (int) Math.min(Integer.MAX_VALUE, available);
}
}
您可以使用
public class ConcatInputStream extends InputStream {
private final InputStream[] is;
private int last = 0;
ConcatInputStream(InputStream[] is) {
this.is = is;
}
public static InputStream of(InputStream... is) {
return new ConcatInputStream(is);
}
@Override
public int read(byte[] b, int off, int len) throws IOException {
for (; last < is.length; last++) {
int read = is[last].read(b, off, len);
if (read >= 0)
return read;
}
throw new EOFException();
}
@Override
public int read() throws IOException {
for (; last < is.length; last++) {
int read = is[last].read();
if (read >= 0)
return read;
}
throw new EOFException();
}
@Override
public int available() throws IOException {
long available = 0;
for(int i = last; i < is.length; i++)
available += is[i].available();
return (int) Math.min(Integer.MAX_VALUE, available);
}
}
只要加上它,有什么问题吗?@muhammedreaat如何加上?请解释使用java代码。您需要在生成文本时添加它。另一种选择是编写链接流,但这要困难得多。为什么要这样做?POP3和SMTP协议的功能类似,但请注意,它们还需要处理消息中仅包含“.”的行。您的用例需要您处理吗?你可能想看看。另外,如果您使用的是getInputStream方法,请注意,您没有获取消息的标题。如果你想要邮件头,你需要使用writeTo方法。@BillShannon正如我在上一篇文章中提到的,当smtp服务器托管在本地时,我正在尝试使用Javamail发送邮件。只需添加它,有什么问题吗?@Muhammedreat如何添加?请解释使用java代码。您需要在生成文本时添加它。另一种选择是编写链接流,但这要困难得多。为什么要这样做?POP3和SMTP协议的功能类似,但请注意,它们还需要处理消息中仅包含“.”的行。您的用例需要您处理吗?你可能想看看。另外,如果您使用的是getInputStream方法,请注意,您没有获取消息的标题。如果你想要标题,你需要使用writeTo方法。@BillShannon正如我在上一篇文章中提到的,当smtp服务器托管在本地时,我试图利用Javamail发送邮件。@PeterLawrey我将InputStream放在一个while循环中读取所有的输入行,直到最后,你认为他想用
“\r\n”标识该行。\r\n
?我所理解的是,他想在输入的末尾添加它,正如他所说的“在结尾我想添加”事实上我不知道,可能你是对的,也可能是我是对的,我想他必须做一点说明more@PeterLawrey我把InputStream放在一个while循环中,读取所有的输入行,直到最后,您认为他想用“\r\n”标识行。\r\n”
?我的理解是,他想在输入的末尾加上它,就像他说的“在结尾我想加上”事实上我不知道,可能你是对的,也可能我是对的,我想他必须再说明一点,我会使用while循环或其他什么,增量之前的返回对我来说有点太狡猾了:)@md_5想象一下你正在从一个文件发送一封大电子邮件。此解决方案允许您一次读取几KB的数据块,最后在末尾发送
。如果首先读取所有数据,则需要使用文件大小的至少1-2倍,这可能并不理想@顺便问一下,你来自墨尔本的哪个地区?我在埃尔塔姆北部长大。@PeterLawrey不支持返回输入流。在Concat之前,首先支持inputstream。如何将concated inputstream设置为支持标记。@Roshan您需要覆盖标记()、标记支持()和重置();我会使用while循环或其他方法,在增量之前返回对我来说太狡猾了:)@md_5想象一下你正在从一个文件发送一封大型电子邮件。此解决方案允许您一次读取几KB的数据块,最后在末尾发送
。如果首先读取所有数据,则需要使用文件大小的至少1-2倍,这可能并不理想@顺便问一下,你来自墨尔本的哪个地区?我在埃尔塔姆北部长大。@PeterLawrey不支持返回输入流。在Concat之前,首先支持inputstream。如何将concated inputstream设置为支持标记。@Roshan您需要覆盖标记()、标记支持()和重置();