Ich habe das C-Dokument unter avro durchlaufen und ich sehe, dass ich nur AVRO-Ausgabe in Datei erhalten kann. Wie bekomme ich die serialisierte Ausgabe in einen Puffer, so dass ich über einen TCP-Socket senden kann. Jede Hilfe wird sehr geschätzt.unterstützt die avro C-Implementierung das Streaming statt der Dateiausgabe?
10
A
Antwort
2
Es gibt eine avro_writer_memory()
genau für diesen Fall, es dauert Pufferzeiger und Länge als Parameter und gibt Ihnen avro_writer_t
, die in regulären Schreibfunktionen verwendet werden können. Sie können seine Verwendung in Tests wie this oder this finden. Das Mindest Beispiel wird so etwas sein (zum Ausgeben codierter Wert auf stderr, so besser, dass Datei zu einem gewissen umleiten und es nach dem Programmlauf untersuchen):
#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;
}
Auch gibt ein avro_writer_memory_set_dest()
ist, die neu festlegen können Puffer, der vom vorhandenen Writer verwendet werden soll.
Verwandte Themen
- 1. Avro an Spark-Streaming über Kafka senden
- 2. Software, die Apple http Live-Streaming unterstützt
- 3. Warum unterstützt wsHttpBinding kein Streaming?
- 4. Unterstützt das Standardargument der Vorlagenklasse die Vorlage?
- 5. Unterstützt Android HLS Adaptive Bitrate Streaming
- 6. Concat Avro Dateien Avro-Tools
- 7. Flash-Video-Player, der Streaming-M4V-Dateien unterstützt
- 8. Unterstützt Azure Streaming-Protokolle Python-Unterstützung?
- 9. Dateiausgabe an Terminal
- 10. Dateiausgabe in Variable speichern
- 11. Unterstützt der Wowza-Server die Standardauthentifizierung?
- 12. Integrationstest einer Bibliothek, die das Streaming von gezippten HTTP-Antworten unterstützt
- 13. AVRO Validation
- 14. Dateiausgabe eines Arrays von Strings
- 15. Avro Schemaevolution
- 16. UTF-8-Dateiausgabe in R
- 17. Dateiausgabe mit Leerzeichen Unix-Formatierung
- 18. Wie mische ich die Karte mit Avro?
- 19. Kafka Spark-Streaming-Integration
- 20. Convert Xml zu Avro von Kafka zu hdfs über Funken Streaming oder Gerinne
- 21. Avro v/s Parkett
- 22. Spritekit, das iAd unterstützt
- 23. Excel VBA saveas csv aber die Dateiausgabe ist das falsche Format
- 24. funke-avro databricks package
- 25. Python - Programm mit Parametern mit Dateiausgabe ausführen
- 26. Json zu avro Umwandlung
- 27. Piping Batch-Dateiausgabe zu einem Python-Skript
- 28. Bijection - Java Avro Serialisierung
- 29. Nach der Zugabe von Klammern, Dateiausgabe nicht richtig
- 30. Warum kann BigQuery eine Avro-Datei, die von avro-tools akzeptiert wird, nicht analysieren?
Warum nicht einfach in die Steckdose schreiben? –
_Any Hilfe ist sehr geschätzt. _ Hmmm, ein Dankeschön Kommentar für die einzige Antwort könnte nett sein. – ryyker