Przeszedłem przez dokument C pod numerem avro i widzę, że mogę dostać tylko plik AVRO do pliku. Jak uzyskać zserializowane wyjście do bufora, aby można było przesłać gniazdo Tcp. Każda pomoc jest doceniana.obsługuje odtwarzanie strumieniowe w avro C zamiast przesyłania plików?
10
A
Odpowiedz
2
W tym przypadku znajduje się avro_writer_memory()
, przyjmuje on wskaźnik i długość bufora jako parametry i daje avro_writer_t
, który może być używany w zwykłych funkcjach zapisu. Możesz znaleźć jego zastosowanie w testach, takich jak this lub this. Minimalna przykładem będzie coś takiego (wpisywanie wartości zakodowanego na stderr, więc lepiej przekierować że do jakiegoś pliku i zbadać go po przebiegu programu):
#include <avro.h>
#include <stdio.h>
#include <unistd.h>
static const char json_schema[] = "{ \"type\": \"string\" }";
int main(void)
{
char buf[1024];
avro_writer_t writer;
avro_schema_t schema;
avro_value_iface_t* iface;
avro_value_t val;
size_t len;
if (avro_schema_from_json_literal(json_schema, &schema) != 0) {
printf("failed to initialize schema\n");
goto out;
}
if ((writer = avro_writer_memory(buf, sizeof(buf))) == NULL) {
printf("failed to initialize writer\n");
goto out_schema;
}
if ((iface = avro_generic_class_from_schema(schema)) == NULL) {
printf("failed to get class from schema\n");
goto out_writer;
}
if (avro_generic_value_new(iface, &val) != 0) {
printf("failed to create new value\n");
goto out_iface;
}
if (avro_value_reset(&val) != 0) {
printf("failed to reset value\n");
goto out_val;
}
if (avro_value_set_string(&val, "some string wrapped by avro") != 0) {
printf("failed to set value string\n");
goto out_val;
}
if (avro_value_write(writer, &val) != 0) {
printf("failed to write value into the buffer\n");
goto out_val;
}
len = avro_writer_tell(writer);
printf("got %lu bytes\n", (unsigned long)len);
if (write(STDERR_FILENO, buf, len) != len) {
printf("failed to write to stderr, oops\n");
goto out_val;
}
out_val:
avro_value_decref(&val);
out_iface:
avro_value_iface_decref(iface);
out_writer:
avro_writer_free(writer);
out_schema:
avro_schema_decref(schema);
out:
return 0;
}
Ponadto, istnieje avro_writer_memory_set_dest()
który pozwala ustawić nowy bufor do użycia przez istniejącego autora.
Powiązane problemy
- 1. Czy S3 obsługuje przesyłanie strumieniowe HTTP?
- 2. Przesyłanie strumieniowe plików zdalnych do obiektów plików
- 3. Przesyłanie strumieniowe plików wideo MP4 na Gstreamer
- 4. Przesyłanie strumieniowe plików multimedialnych za pomocą WebRTC
- 5. Odtwarzanie i kontrolowanie plików MP3 w Pythonie?
- 6. Przesyłanie strumieniowe plików Avi z C# przy użyciu RTP
- 7. Testowanie przesyłania plików w kolbie
- 8. Pliki do przesyłania plików PHP
- 9. Odtwarzanie krótkich plików .wav - Android
- 10. Strumieniowe przesyłanie plików MP3 w C# .NET 4.5.1 MVC 5.2.2 na Samsunga 6S
- 11. Przesyłanie strumieniowe Silverlight
- 12. Odtwarzanie dźwięku w .Net/C#
- 13. Odtwarzanie binarne w Visual C++
- 14. Dlaczego wsHttpBinding nie obsługuje przesyłania strumieniowego?
- 15. ASP.NET - Ograniczenie przesyłania plików dostępne typy plików
- 16. Howto: Formularz przesyłania plików Drupala
- 17. Czy znacznik dźwiękowy HTML5 obsługuje odtwarzanie plików MP3 z innej domeny?
- 18. prosty skrypt do przesyłania plików
- 19. Przewodnik szybkiego przesyłania plików php
- 20. Pasek postępu przesyłania plików iframe?
- 21. AVRO Validation
- 22. Najlepsza praktyka przesyłania plików w CakePHP
- 23. UnicodeEncodeError podczas przesyłania plików w administratorze Django
- 24. Używanie libcurl do przesyłania plików do DropBox
- 25. Przesyłanie strumieniowe do usług Azure Media Services
- 26. C# zapisywanie plików w folderze na serwerze zamiast lokalnego
- 27. gunicorn nie obsługuje plików statycznych
- 28. AVAudioPlayer - odtwarzanie wielu plików audio, kolejno
- 29. Wznawianie przesyłania przy użyciu interfejsu API przesyłania plików HTML5 -
- 30. stream.io strumieniowe dane binarne
Dlaczego po prostu nie pisać do gniazda? –
_Jedna pomoc jest bardzo cenna. Hmmm, komentarz z podziękowaniami za jedyną odpowiedź może być miły. – ryyker