Как перехватить поток памяти (C#) по проводу, идущему в java inputstreamarray
У меня есть служба wcf rest, в которой я создал MemoryStream для одного из моих операционных контрактов, который имеет объект, инкапсулирующий множество свойств. Это HTTP-запрос GET для передачи данных клиенту (приложение Android music).
Я написал некоторый код, чтобы взять мой служебный MemoryStream в приложение на основе java, но я не совсем уверен, как я должен управлять преобразованием MemoryStream в InputStreamArray. Двух разных языков программирования (C# &амп; Ява). Кто-нибудь может помочь с каким-нибудь примером кода. Я опубликую свою кодовую базу, если кто-то захочет ее увидеть, но это довольно сложно-попытаться организовать ее здесь и сделать хорошим смыслом для других.
Ниже приведен вывод моего сообщения wcf, которое является envolope в формате JSON. Любая помощь будет очень оценена. Спасибо!
Вот мой формат wcf web servie JSON перед обработкой моего универсального объекта списка в поток памяти.
LoadTracksByAlbumResult: [{AlbumCoverPhotoUrl: "/UploadContents/AlbumCoverPhoto/2135/Sauce Walka - The Sauce Father.jpg",…},…] 2. 0: {AlbumCoverPhotoUrl: "/UploadContents/AlbumCoverPhoto/2135/Sauce Walka - The Sauce Father.jpg",…} 1. AlbumCoverPhotoUrl: "/UploadContents/AlbumCoverPhoto/2135/Sauce Walka - The Sauce Father.jpg" 2. AlbumID: 2135 3. AlbumName: "Sauce Walka - The Sauce Father" 4. Artists: "(Sauce Walka . )" 5. CreatedBy: 0 6. CreatedOn: "6/5/2017" 7. DiscJockeyName: "(No DJ. )" 8. DjID: 23 9. DownloadStatus: false 10. TotalStreams: "1039" 11. TrackDescription: "Description 1" 12. TrackID: 35094 13. TrackStatus: true 14. TrackTitle: "01-Sauce_Walka-We_Did_It" 15. TrackUrl: "/UploadContents/AlbumTracks/2135/01-Sauce_Walka-We_Did_It.mp3" 16. UpdatedBy: 0 17. UpdatedOn: "" 3. 1: {AlbumCoverPhotoUrl: "/UploadContents/AlbumCoverPhoto/2135/Sauce Walka - The Sauce Father.jpg",…} 4. 2: {AlbumCoverPhotoUrl: "/UploadContents/AlbumCoverPhoto/2135/Sauce Walka - The Sauce Father.jpg",…} 5. 3: {AlbumCoverPhotoUrl: "/UploadContents/AlbumCoverPhoto/2135/Sauce Walka - The Sauce Father.jpg",…} 6. 4: {AlbumCoverPhotoUrl: "/UploadContents/AlbumCoverPhoto/2135/Sauce Walka - The Sauce Father.jpg",…} 7. 5: {AlbumCoverPhotoUrl: "/UploadContents/AlbumCoverPhoto/2135/Sauce Walka - The Sauce Father.jpg",…}
А вот ниже приведен мой формат wcf web servie JSON, завернутый в поток памяти.
Что я уже пробовал:
{LoadTracksByAlbumResult: {__identity: null,…}} LoadTracksByAlbumResult: {__identity: null,…} 1. __identity: null 2. _buffer: [91, 123, 34, 84, 114, 97, 99, 107, 73, 68, 34, 58, 51, 53, 48, 57, 52, 44, 34, 84, 114, 97, 99, 107,…] 3. _capacity: 7522 4. _expandable: false 5. _exposable: false 6. _isOpen: true 7. _length: 7522 8. _origin: 0 9. _position: 0 10. _writable: true
Частичный код с серверной стороны потока памяти ниже. Подготавливает объект данных для передачи по проводу.
Реализация функции ниже:
byte[] byteArray = new byte[4000]; // Convert the data Object (generic list) to be serialized and return a JSON string. var json1 = new JavaScriptSerializer().Serialize(loadAlbumTracksList1); // Convert the string into bytes of array. byteArray = Encoding.UTF8.GetBytes(json1); //public override bool MemoryStream stream = new MemoryStream(byteArray); //stream.GetBuffer(); return stream;
Клиентская сторона java: потребление для кусков данных, так что производительность хороша для прослушивания mp3-файлов с сервера. Это частичный код ниже.
Строковый ответственный параметр-это место, куда вводится поток памяти после того, как он проходит через основную сеть (url, имя хоста, конечная точка, порт # и т. д. здесь обрабатываются) приложения. Ниже приведена дополнительная сеть только для потокового процесса, хотя я написал код для приема 2 других вызовов веб-службы wcf, которые поступают с буферизованного сервера. Не могли бы вы помочь? Я знаю, что получаю сообщение об ошибке, говорящее, что кодировка не может быть отображена.
public String getStream(String responseBody) { String result = ""; InputStream inputStream = null; try { /* * Encodes this {@code String} into a sequence of bytes using the * platform's default charset, storing the result into a new byte array. */ inputStream = new ByteArrayInputStream(responseBody.getBytes(), 0, 0); result = convertInputStreamToString(inputStream); } catch(Exception ex) { Log.e("Exception",ex.getLocalizedMessage()); } finally{ if(inputStream!=null){ try { inputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } return result; }
private static String convertInputStreamToString(InputStream inputStream) throws IOException { BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(inputStream) ); String line = ""; String result = ""; while((line = bufferedReader.readLine()) != null)// Reads characters into a portion of an array. result += line; inputStream.close(); return result; }
@Override public void onRequestSuccess(String responseBody, String type) { // Call the getStream function to convert streamToString NetworkClient streamProcess = new NetworkClient(); String streamResponse = streamProcess.getStream(responseBody); JSONObject obj = CommonServices.stringToJSON(streamResponse); if(obj != null){ switch (type) { case "loadtrack": loadGridFromSavedJSONData(obj);