我的InputStream处理有问题。我有SpringMVC项目的文件上传。文件是纯文本文件。我首先要确保字符编码,所以我使用流来检测字符集编码。然后根据这种编码我尝试读取文件。我的问题是当我检测到charset时,InputStream指针向前移动,所以当我尝试读取文件之后,它会跳过文件的开头。
我想我可以将读取字节添加到某些列表中,而不是首先读取此列表并继续使用流,但我不想在内存中以整个文件结束。
如何从文件上传的开头开始流?
答案 0 :(得分:1)
XY问题。您不需要字符编码。只需使用流复制传入数据,而不是 var mqQueueManager = getMqQueueManager(ConfigurationManager.AppSettings["MQ_QueueManager"]);
var mqQueue = mqQueueManager.AccessQueue(mqReceiveQueueName,
MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_FAIL_IF_QUIESCING);
MQGetMessageOptions gmo = new MQGetMessageOptions();
gmo.Options = MQC.MQGMO_NO_WAIT;
for (int i = 0; i < maxMessagesToRead; i++)
{
var mqMessage = new MQMessage();
mqQueue.Get(mqMessage, gmo);
messageTexts.Add(mqMessage.ReadString(mqMessage.MessageLength));
}
和Readers
。这样,无论编码是什么,它都会被保留。
答案 1 :(得分:0)
读取某些数据后无法重新启动流,这是流的功能。 您可以使用任何您喜欢的Reader类,例如
new BufferedReader(new InputStreamReader(stream, charset));
如果你事先不知道charset并且它可能与默认值不同,你最好将流内容保存到内存结构或文件中,然后进行分析。