Java.IO.IOException при записи выходного потока используют канал ParcelFileDescriptor - PullRequest
0 голосов
/ 13 февраля 2019

Я всегда получаю сообщение об ошибке, когда пытаюсь записать outputtream> 128kb

Я пишу outputtream через каждые 8192 байта строки, и каждый раз, когда байты превышают 128kb, код всегда привязывается к os.write (), а затемПримерно через 5 минут я получил IOException.

            ParcelFileDescriptor[] payloadPipe = ParcelFileDescriptor.CreatePipe();

            Payload payload = Payload.FromStream(payloadPipe[0]);

            String deviceId = EndpointId;

            var result = ConnectionsClient.SendPayload(deviceId, payload);

                os = new ParcelFileDescriptor.AutoCloseOutputStream(payloadPipe[1]);
                int textlength = Text.Length;
                int cutLength = 8192;
                try
                {
                    for (int i = 0; i < textlength; i += cutLength)
                    {
                        string newtext = "";

                        if (i + cutLength < textlength)
                        {
                            try
                            {

                                newtext = Text.Substring(i, cutLength);
                            }
                            catch (System.Exception)
                            {

                                throw;
                            }
                        }
                        else
                        {
                            newtext = Text.Substring(i, textlength % cutLength);
                        }

                        try
                        {
                            System.Text.Encoding encoding = System.Text.Encoding.UTF8;
                            os.Write(encoding.GetBytes(newtext));
                            os.Flush();
                        }
                        catch (Java.IO.IOException ex)
                        {
                            string asd = ex.ToString();
                            sendQueue2.Add(PayloadsQueue);
                        }
                    }
                }
                catch
                {
                    INearbyListener.OnPayloadSendFailure();
                }
                finally
                {
                    try
                    {
                        os.Close();
                    }
                    catch
                    {
                    }
                }

В Android Studio работает, но когда я пытаюсь в xamarin, всегда выдает ошибку

...