#include <google/protobuf/io/zero_copy_stream_impl_lite.h>
namespace google::protobuf::io
Ten plik zawiera typowe implementacje interfejsów zdefiniowane w pliku zero_copy_stream.h i należące do biblioteki protobuf Lite.
Te implementacje obejmują wejścia/wyjścia na nieprzetworzonych tablicach i ciągach tekstowych, a także adaptery ułatwiające wdrażanie strumieni na podstawie tradycyjnych strumieni. Oczywiście wielu użytkowników woli tworzyć własne implementacje tych interfejsów dla konkretnych abstrakcji I/O, ale powinny one uwzględniać najczęstsze przypadki.
Zajęcia w tym pliku | |
---|---|
Obiekt ZeroCopyInputStream obsługiwany przez tablicę w pamięci w pamięci. | |
Obiekt ZeroCopyoutputStream oparty na tablicy pamięci w pamięci. | |
ZeroCopyoutputStream, który dołącza bajty do ciągu znaków. | |
Ogólny interfejs tradycyjnego strumienia wejściowego. | |
ZeroCopyInputStream odczytujący dane z CopyInputStream. | |
Ogólny interfejs tradycyjnego strumienia wyjściowego. | |
ZeroCopyoutputStream zapisujący w CopyoutputStream. | |
ZeroCopyInputStream, który opakowuje część innego strumienia i ogranicza ją do określonej liczby bajtów. |
Użytkownicy plikówTe definicje nie są częścią żadnej klasy. | |
---|---|
char * | mutable_string_data(std::string * s) Zwróć uwagę na zmienne znaki, które znajdują się pod danym ciągiem znaków. więcej... |
std::pair< char *, bool > | as_string_data(std::string * s) as_string_data(s) jest odpowiednikiem ({ char* p = mutable_string_data(s); Make_pair(p, p != NULL); }) Czasami jest szybszy: w niektórych sytuacjach p nie może mieć wartości NULL, a kod może tego uniknąć. |
char * io::mutable_string_data(
std::string * s)
std::string * s)
Zwróć uwagę na zmienne znaki, które znajdują się pod danym ciągiem znaków.
Wartość zwracana jest prawidłowa do czasu zmiany rozmiaru ciągu. Wierzymy, że wywołanie będzie traktowane jako zwrócona wartość w postaci długości strony s->size().
class ArrayInputStream: public ZeroCopyInputStream
#include <google/protobuf/io/zero_copy_stream_impl_lite.h>
namespace google::protobuf::io
Obiekt ZeroCopyInputStream obsługiwany przez tablicę w pamięci w pamięci.
Wspierający | |
---|---|
| ArrayInputStream(const void * data, int size, int block_size = -1) Utwórz obiektinputStream, który zwraca bajty określone przez „data”. więcej... |
| ~ArrayInputStream() |
implementuje ZeroCopyInputStream | |
virtual bool | Next(const void ** data, int * size) Uzyskuje część danych ze strumienia. więcej... |
virtual void | BackUp(int count) |
virtual bool | Skip(int count) Pomija kilka bajtów. więcej... |
virtual int64_t | ByteCount() const Zwraca łączną liczbę odczytanych bajtów od momentu utworzenia tego obiektu. |
ArrayInputStream::ArrayInputStream(
const void * data,
int size,
int block_size = -1)
const void * data,
int size,
int block_size = -1)
Utwórz obiektinputStream, który zwraca bajty określone przez „data”.
Element „data” pozostaje własnością obiektu wywołującego, ale musi pozostać ważny do czasu zniszczenia strumienia. Jeśli podasz parametr block_size, wywołania Next() będą zwracać bloki danych nie większe niż dany rozmiar. W przeciwnym razie pierwsze wywołanie funkcji Next() zwraca całą tablicę. Parametr block_size jest szczególnie przydatny do testowania; w środowisku produkcyjnym nie ma sensu go konfigurować.
virtual bool ArrayInputStream::Next(
const void ** data,
int * size)
const void ** data,
int * size)
Uzyskuje część danych ze strumienia.
Warunki wstępne:
- „size” i „data” nie mają wartości NULL.
Warunki warunkowe:
- Jeśli zwrócona wartość to fałsz, nie ma więcej danych do zwrócenia lub wystąpił błąd. Wszystkie błędy są nieodwracalne.
- W przeciwnym razie „size” wskazuje faktyczną liczbę odczytanych bajtów, a „data” wskazuje bufor wskazujący bufor zawierający te bajty.
- Własność tego bufora pozostaje zgodna ze strumieniem, a bufor pozostaje ważny tylko do momentu wywołania innej metody strumienia lub zniszczenia strumienia.
- Zwrócony rozmiar bufora może mieć zerowy rozmiar, jeśli funkcja Next() wielokrotnie generuje bufor o rozmiarze innym niż zero.
virtual void ArrayInputStream::BackUp(
int count)
int count)
Tworzę kopię zapasową kilku bajtów, dzięki czemu kolejne wywołanie metody Next() ponownie zwraca dane, które zostały zwrócone przez ostatnie wywołanie funkcji Next().
Jest to przydatne, gdy piszesz procedury, które mają na celu odczytanie danych tylko do określonego punktu wejściowego, a potem zwracanie. Jeśli funkcja Next() zwraca bufor, który wykracza poza to, co chcesz przeczytać, możesz użyć funkcji BackUp(), aby wrócić do miejsca, w którym miała się zakończyć.
Warunki wstępne:
- Ostatnia wywoływana metoda to Next().
- liczba musi być mniejsza niż lub równa rozmiarowi ostatniego bufora zwróconego przez Next().
Warunki warunkowe:
virtual bool ArrayInputStream::Skip(
int count)
int count)
Pomija kilka bajtów.
Zwraca wartość „false”, jeśli koniec strumienia został osiągnięty lub wystąpił błąd dotyczący danych wejściowych. W przypadku strumienia typu end-stream strumień jest przesunięty do końca (np. funkcja ByteCount() zwraca całkowity rozmiar strumienia).
class ArrayoutputStream: publiczny ZeroCopyoutputStream
#include <google/protobuf/io/zero_copy_stream_impl_lite.h>
namespace google::protobuf::io
Obiekt ZeroCopyoutputStream oparty na tablicy pamięci w pamięci.
Wspierający | |
---|---|
| ArrayOutputStream(void * data, int size, int block_size = -1) Utwórz dane wyjściowe, które zapisują się w bajtach oznaczonych wartością „data”. więcej... |
| ~ArrayOutputStream() |
implementuje ZeroCopyoutputStream | |
virtual bool | Next(void ** data, int * size) Uzyskuje bufor, w którym można zapisywać dane. więcej... |
virtual void | BackUp(int count) |
virtual int64_t | ByteCount() const Zwraca łączną liczbę bajtów zapisanych od momentu utworzenia tego obiektu. |
ArrayOutputStream::ArrayOutputStream(
void * data,
int size,
int block_size = -1)
void * data,
int size,
int block_size = -1)
Utwórz dane wyjściowe, które zapisują się w bajtach oznaczonych wartością „data”.
Element „data” pozostaje własnością obiektu wywołującego, ale musi pozostać ważny do czasu zniszczenia strumienia. Jeśli podasz parametr block_size, wywołania Next() będą zwracać bloki danych nie większe niż dany rozmiar. W przeciwnym razie pierwsze wywołanie funkcji Next() zwraca całą tablicę. Parametr block_size jest szczególnie przydatny do testowania; w środowisku produkcyjnym nie ma sensu go konfigurować.
virtual bool ArrayOutputStream::Next(
void ** data,
int * size)
void ** data,
int * size)
Uzyskuje bufor, w którym można zapisywać dane.
Wszystkie dane zapisane w buforze zostaną zapisane w danych wyjściowych (prawdopodobnie później).
Warunki wstępne:
- „size” i „data” nie mają wartości NULL.
Warunki warunkowe:
- Jeśli zwrócona wartość to „false”, wystąpił błąd. Wszystkie błędy są nieodwracalne.
- W innym przypadku „rozmiar” wskazuje rzeczywistą liczbę bajtów w buforze, a „dane” wskazuje bufor.
- Własność tego bufora pozostaje zgodna ze strumieniem, a bufor pozostaje ważny tylko do momentu wywołania innej metody strumienia lub zniszczenia strumienia.
- Wszystkie dane przechowywane w buforze przez rozmówcę będą później zapisywane w danych wyjściowych (chyba że wywołana zostanie funkcja BackUp()).
- Zwrócony rozmiar bufora może mieć zerowy rozmiar, jeśli funkcja Next() wielokrotnie generuje bufor o rozmiarze innym niż zero.
virtual void ArrayOutputStream::BackUp(
int count)
int count)
Tworzy kopię zapasową kilku bajtów, dzięki czemu ostatni bufor zwrócony przez Next() nie jest w rzeczywistości zapisywany.
Jest to konieczne, gdy skończysz pisać wszystkie dane, które chcesz zapisać, ale ostatni bufor jest większy niż potrzeba. Nie chcesz przejmować się śmieciami, bo zamiast tworzyć kopię zapasową, możesz użyć funkcji BackUp().
Warunki wstępne:
- Ostatnia wywoływana metoda to Next().
- liczba musi być mniejsza niż lub równa rozmiarowi ostatniego bufora zwróconego przez Next().
- Element wywołujący nie może nic zapisać do ostatnich „count” bajtów tego bufora.
Warunki warunkowe:
- Ostatnie „count” bajty ostatniego bufora zwróconego przez Next() są ignorowane.
class StringoutputStream: publiczny ZeroCopyoutputStream
#include <google/protobuf/io/zero_copy_stream_impl_lite.h>
namespace google::protobuf::io
ZeroCopyoutputStream, który dołącza bajty do ciągu znaków.
Wspierający | |
---|---|
explicit | StringOutputStream(std::string * target) Utwórz StringoutputStream, który dołączy bajty do danego ciągu znaków. więcej... |
| ~StringOutputStream() |
implementuje ZeroCopyoutputStream | |
virtual bool | Next(void ** data, int * size) Uzyskuje bufor, w którym można zapisywać dane. więcej... |
virtual void | BackUp(int count) |
virtual int64_t | ByteCount() const Zwraca łączną liczbę bajtów zapisanych od momentu utworzenia tego obiektu. |
explicit StringOutputStream::StringOutputStream(
std::string * target)
std::string * target)
Utwórz StringoutputStream, który dołączy bajty do danego ciągu znaków.
Ciąg znaków pozostaje własnością elementu wywołującego, ale jest zmieniany w dowolny sposób i NIE MOŻE być otwierany w żaden sposób, dopóki nie skończysz transmisji. Upewnij się, że nie ma już możliwości użycia, lub (najbezpieczniej) zniszcz strumień przed użyciem treści.
Podpowiedź: jeśli przed utworzeniem strumienia wywołasz element target->reserve(n), pierwsze wywołanie funkcji Next() zwróci co najmniej n bajtów miejsca na dane.
virtual bool StringOutputStream::Next(
void ** data,
int * size)
void ** data,
int * size)
Uzyskuje bufor, w którym można zapisywać dane.
Wszystkie dane zapisane w buforze zostaną zapisane w danych wyjściowych (prawdopodobnie później).
Warunki wstępne:
- „size” i „data” nie mają wartości NULL.
Warunki warunkowe:
- Jeśli zwrócona wartość to „false”, wystąpił błąd. Wszystkie błędy są nieodwracalne.
- W innym przypadku „rozmiar” wskazuje rzeczywistą liczbę bajtów w buforze, a „dane” wskazuje bufor.
- Własność tego bufora pozostaje zgodna ze strumieniem, a bufor pozostaje ważny tylko do momentu wywołania innej metody strumienia lub zniszczenia strumienia.
- Wszystkie dane przechowywane w buforze przez rozmówcę będą później zapisywane w danych wyjściowych (chyba że wywołana zostanie funkcja BackUp()).
- Zwrócony rozmiar bufora może mieć zerowy rozmiar, jeśli funkcja Next() wielokrotnie generuje bufor o rozmiarze innym niż zero.
virtual void StringOutputStream::BackUp(
int count)
int count)
Tworzy kopię zapasową kilku bajtów, dzięki czemu ostatni bufor zwrócony przez Next() nie jest w rzeczywistości zapisywany.
Jest to konieczne, gdy skończysz pisać wszystkie dane, które chcesz zapisać, ale ostatni bufor jest większy niż potrzeba. Nie chcesz przejmować się śmieciami, bo zamiast tworzyć kopię zapasową, możesz użyć funkcji BackUp().
Warunki wstępne:
- Ostatnia wywoływana metoda to Next().
- liczba musi być mniejsza niż lub równa rozmiarowi ostatniego bufora zwróconego przez Next().
- Element wywołujący nie może nic zapisać do ostatnich „count” bajtów tego bufora.
Warunki warunkowe:
- Ostatnie „count” bajty ostatniego bufora zwróconego przez Next() są ignorowane.
zajęcia CopyInputStream
#include <google/protobuf/io/zero_copy_stream_impl_lite.h>
namespace google::protobuf::io
Ogólny interfejs tradycyjnego strumienia wejściowego.
Wiele tradycyjnych strumieni wejściowych (np. deskryptory plików, strumienie C i + istreamy C++) udostępnia interfejs, w którym każdy odczyt obejmuje kopiowanie bajtów do bufora. Jeśli chcesz użyć takiego interfejsu i zbudować na jego podstawie parametr ZeroCopyInputStream, po prostu zaimplementuj funkcję CopyInputStream, a potem użyj metody CopyInputStreamAdaptor.
W miarę możliwości implementacje CopyInputStream powinny unikać buforowania. CopyInputStreamAdaptor stosuje własne buforowanie i odczytuje dane w dużych blokach.
Wspierający | |
---|---|
virtual | ~CopyingInputStream() |
virtual int | Read(void * buffer, int size) = 0 Odczytuje do bajtów („size”) bajty w danym buforze. więcej... |
virtual int | Skip(int count) Pomija następne „count” bajty wejściowe. więcej... |
virtual int CopyingInputStream::Read(
void * buffer,
int size) = 0
void * buffer,
int size) = 0
Odczytuje do bajtów („size”) bajty w danym buforze.
Zwraca liczbę bajtów odczytanych. Funkcja Read() czeka, aż co najmniej jeden bajt będzie dostępny, lub zwraca zero, jeśli już nie ma żadnych bajtów, lub -1, jeśli wystąpił trwały błąd odczytu.
virtual int CopyingInputStream::Skip(
int count)
int count)
Pomija następne „count” bajty wejściowe.
Zwraca liczbę bajtów pominiętych. Ta wartość zawsze będzie równa „count”, chyba że został osiągnięty limit czasu odczytu lub wystąpił trwały błąd odczytu.
Domyślna implementacja wielokrotnie wywołuje metodę Read() w buforze zdrapek.
class CopyInputStreamAdapteror: publiczny ZeroCopyInputStream
#include <google/protobuf/io/zero_copy_stream_impl_lite.h>
namespace google::protobuf::io
ZeroCopyInputStream odczytujący dane z CopyInputStream.
Jest to przydatne w implementacji ZeroCopyInputStreams odczytywanych z tradycyjnych strumieni. Uwaga: zajęcia nie są kopiowane.
Jeśli chcesz odczytywać dane z deskryptorów plików lub strumieni i C++, masz to już skonfigurowane: użyj odpowiednio FileInputStream lub IstreamInputStream.
Wspierający | |
---|---|
explicit | CopyingInputStreamAdaptor(CopyingInputStream * copying_stream, int block_size = -1) Tworzy strumień, który odczytuje dane z danych CopyInputStream. więcej... |
| ~CopyingInputStreamAdaptor() |
void | SetOwnsCopyingStream(bool value) Wywołaj SetSetsCopyStream(true), aby przekazać funkcję CopyInputStreamAdaptor do usunięcia bazowego elementu CopyInputStream po jego zniszczeniu. |
implementuje ZeroCopyInputStream | |
virtual bool | Next(const void ** data, int * size) Uzyskuje część danych ze strumienia. więcej... |
virtual void | BackUp(int count) |
virtual bool | Skip(int count) Pomija kilka bajtów. więcej... |
virtual int64_t | ByteCount() const Zwraca łączną liczbę odczytanych bajtów od momentu utworzenia tego obiektu. |
explicit CopyingInputStreamAdaptor::CopyingInputStreamAdaptor(
CopyingInputStream * copying_stream,
int block_size = -1)
CopyingInputStream * copying_stream,
int block_size = -1)
Tworzy strumień, który odczytuje dane z danych CopyInputStream.
Użycie parametru block_size określa liczbę bajtów, które powinny zostać odczytane i zwrócone wraz z każdym wywołaniem funkcji Next(). W przeciwnym razie w przypadku użycia wartości rozsądnej używana jest wartość domyślna. Wywołujący zachowuje prawo własności do kopiowania przez strumień, chyba że zostanie wywołany SetSetsCopyStream(true).
virtual bool CopyingInputStreamAdaptor::Next(
const void ** data,
int * size)
const void ** data,
int * size)
Uzyskuje część danych ze strumienia.
Warunki wstępne:
- „size” i „data” nie mają wartości NULL.
Warunki warunkowe:
- Jeśli zwrócona wartość to fałsz, nie ma więcej danych do zwrócenia lub wystąpił błąd. Wszystkie błędy są nieodwracalne.
- W przeciwnym razie „size” wskazuje faktyczną liczbę odczytanych bajtów, a „data” wskazuje bufor wskazujący bufor zawierający te bajty.
- Własność tego bufora pozostaje zgodna ze strumieniem, a bufor pozostaje ważny tylko do momentu wywołania innej metody strumienia lub zniszczenia strumienia.
- Zwrócony rozmiar bufora może mieć zerowy rozmiar, jeśli funkcja Next() wielokrotnie generuje bufor o rozmiarze innym niż zero.
virtual void CopyingInputStreamAdaptor::BackUp(
int count)
int count)
Tworzę kopię zapasową kilku bajtów, dzięki czemu kolejne wywołanie metody Next() ponownie zwraca dane, które zostały zwrócone przez ostatnie wywołanie funkcji Next().
Jest to przydatne, gdy piszesz procedury, które mają na celu odczytanie danych tylko do określonego punktu wejściowego, a potem zwracanie. Jeśli funkcja Next() zwraca bufor, który wykracza poza to, co chcesz przeczytać, możesz użyć funkcji BackUp(), aby wrócić do miejsca, w którym miała się zakończyć.
Warunki wstępne:
- Ostatnia wywoływana metoda to Next().
- liczba musi być mniejsza niż lub równa rozmiarowi ostatniego bufora zwróconego przez Next().
Warunki warunkowe:
virtual bool CopyingInputStreamAdaptor::Skip(
int count)
int count)
Pomija kilka bajtów.
Zwraca wartość „false”, jeśli koniec strumienia został osiągnięty lub wystąpił błąd dotyczący danych wejściowych. W przypadku strumienia typu end-stream strumień jest przesunięty do końca (np. funkcja ByteCount() zwraca całkowity rozmiar strumienia).
klasa CopyoutputStream
#include <google/protobuf/io/zero_copy_stream_impl_lite.h>
namespace google::protobuf::io
Ogólny interfejs tradycyjnego strumienia wyjściowego.
Wiele tradycyjnych strumieni danych wyjściowych (np. deskryptory plików, strumienie C i i i-strumienie C++) udostępnia interfejs, w którym każdy zapis wymaga kopiowania bajtów z bufora. Jeśli chcesz skorzystać z tego interfejsu i zbudować na jego podstawie parametr ZeroCopyoutputStream, po prostu zaimplementuj funkcję CopyoutputStream, a potem użyj polecenia CopyoutputStreamAdaptor.
W miarę możliwości implementacje CopyoutputStream powinny unikać buforowania. Funkcja CopyoutputStreamAdaptor sama stosuje buforowanie i zapisuje dane w dużych blokach.
Wspierający | |
---|---|
virtual | ~CopyingOutputStream() |
virtual bool | Write(const void * buffer, int size) = 0 Zapisuje w danych wyjściowych bajty „size” z danego bufora. więcej... |
virtual bool CopyingOutputStream::Write(
const void * buffer,
int size) = 0
const void * buffer,
int size) = 0
Zapisuje w danych wyjściowych bajty „size” z danego bufora.
Zwraca wartość „true” (prawda), jeśli się powiedzie – „false” (fałsz).
class CopyoutputStreamAdapteror: publiczna ZeroCopyoutputStream
#include <google/protobuf/io/zero_copy_stream_impl_lite.h>
namespace google::protobuf::io
ZeroCopyoutputStream zapisujący w CopyoutputStream.
Jest to przydatne przy implementowaniu ZeroCopyoutputStream, które zapisują dane w tradycyjnych strumieniach. Uwaga: zajęcia nie są kopiowane.
Jeśli chcesz zapisywać dane w deskryptorach plików lub strumieniach C++, masz to już skonfigurowane: użyj odpowiednio FileoutputStream lub OstreamoutputStream.
Znane podklasy:
Wspierający | |
---|---|
explicit | CopyingOutputStreamAdaptor(CopyingOutputStream * copying_stream, int block_size = -1) Tworzy strumień, który zapisuje dane w deskryptoru pliku Unix. więcej... |
| ~CopyingOutputStreamAdaptor() |
bool | Flush() Zapisuje wszystkie oczekujące dane w bazowym strumieniu. więcej... |
void | SetOwnsCopyingStream(bool value) Wywołaj SetSetsCopyStream(true), aby poinformować CopyoutputStreamAdaptor, aby usunął bazowy element CopyoutputStream po jego zniszczeniu. |
implementuje ZeroCopyoutputStream | |
virtual bool | Next(void ** data, int * size) Uzyskuje bufor, w którym można zapisywać dane. więcej... |
virtual void | BackUp(int count) |
virtual int64_t | ByteCount() const Zwraca łączną liczbę bajtów zapisanych od momentu utworzenia tego obiektu. |
virtual bool | WriteAliasedRaw(const void * data, int size) Zapisz dane w danych wyjściowych. więcej... |
virtual bool | AllowsAliasing() const |
explicit CopyingOutputStreamAdaptor::CopyingOutputStreamAdaptor(
CopyingOutputStream * copying_stream,
int block_size = -1)
CopyingOutputStream * copying_stream,
int block_size = -1)
Tworzy strumień, który zapisuje dane w deskryptoru pliku Unix.
Parametr block_size określa rozmiar bufora, który powinien zostać zwrócony przez funkcję Next(). W przeciwnym razie w przypadku sensu zostanie użyta rozsądna wartość domyślna.
bool CopyingOutputStreamAdaptor::Flush()
Zapisuje wszystkie oczekujące dane w bazowym strumieniu.
Zwraca wartość „false”, jeśli w podstawowym strumieniu wystąpił błąd zapisu. (Strumień nie musi być całkowicie usunięty).
virtual bool CopyingOutputStreamAdaptor::Next(
void ** data,
int * size)
void ** data,
int * size)
Uzyskuje bufor, w którym można zapisywać dane.
Wszystkie dane zapisane w buforze zostaną zapisane w danych wyjściowych (prawdopodobnie później).
Warunki wstępne:
- „size” i „data” nie mają wartości NULL.
Warunki warunkowe:
- Jeśli zwrócona wartość to „false”, wystąpił błąd. Wszystkie błędy są nieodwracalne.
- W innym przypadku „rozmiar” wskazuje rzeczywistą liczbę bajtów w buforze, a „dane” wskazuje bufor.
- Własność tego bufora pozostaje zgodna ze strumieniem, a bufor pozostaje ważny tylko do momentu wywołania innej metody strumienia lub zniszczenia strumienia.
- Wszystkie dane przechowywane w buforze przez rozmówcę będą później zapisywane w danych wyjściowych (chyba że wywołana zostanie funkcja BackUp()).
- Zwrócony rozmiar bufora może mieć zerowy rozmiar, jeśli funkcja Next() wielokrotnie generuje bufor o rozmiarze innym niż zero.
virtual void CopyingOutputStreamAdaptor::BackUp(
int count)
int count)
Tworzy kopię zapasową kilku bajtów, dzięki czemu ostatni bufor zwrócony przez Next() nie jest w rzeczywistości zapisywany.
Jest to konieczne, gdy skończysz pisać wszystkie dane, które chcesz zapisać, ale ostatni bufor jest większy niż potrzeba. Nie chcesz przejmować się śmieciami, bo zamiast tworzyć kopię zapasową, możesz użyć funkcji BackUp().
Warunki wstępne:
- Ostatnia wywoływana metoda to Next().
- liczba musi być mniejsza niż lub równa rozmiarowi ostatniego bufora zwróconego przez Next().
- Element wywołujący nie może nic zapisać do ostatnich „count” bajtów tego bufora.
Warunki warunkowe:
- Ostatnie „count” bajty ostatniego bufora zwróconego przez Next() są ignorowane.
virtual bool CopyingOutputStreamAdaptor::WriteAliasedRaw(
const void * data,
int size)
const void * data,
int size)
Zapisz dane w danych wyjściowych.
Niektóre strumienie wyjściowe mogą implementować tę funkcję w sposób, który pozwala uniknąć kopiowania. Sprawdź metodę allowAliasing() przed wywołaniem funkcji WriteAliasedRaw(). Jeśli funkcja WriteAliasedRaw() zostanie wywołana w strumieniu, który nie zezwala na aliasy, wystąpi błąd GOOGLE_Check.
UWAGA: rozmówca ma obowiązek zapewnić, że fragment pamięci pozostanie aktywny, dopóki wszystkie dane nie zostaną wykorzystane ze strumienia.
zajęcia LimitingInputStream: publiczne ZeroCopyInputStream
#include <google/protobuf/io/zero_copy_stream_impl_lite.h>
namespace google::protobuf::io
ZeroCopyInputStream, który opakowuje część innego strumienia i ogranicza ją do określonej liczby bajtów.
Wspierający | |
---|---|
| LimitingInputStream(ZeroCopyInputStream * input, int64 limit) |
| ~LimitingInputStream() |
implementuje ZeroCopyInputStream | |
virtual bool | Next(const void ** data, int * size) Uzyskuje część danych ze strumienia. więcej... |
virtual void | BackUp(int count) |
virtual bool | Skip(int count) Pomija kilka bajtów. więcej... |
virtual int64_t | ByteCount() const Zwraca łączną liczbę odczytanych bajtów od momentu utworzenia tego obiektu. |
virtual bool LimitingInputStream::Next(
const void ** data,
int * size)
const void ** data,
int * size)
Uzyskuje część danych ze strumienia.
Warunki wstępne:
- „size” i „data” nie mają wartości NULL.
Warunki warunkowe:
- Jeśli zwrócona wartość to fałsz, nie ma więcej danych do zwrócenia lub wystąpił błąd. Wszystkie błędy są nieodwracalne.
- W przeciwnym razie „size” wskazuje faktyczną liczbę odczytanych bajtów, a „data” wskazuje bufor wskazujący bufor zawierający te bajty.
- Własność tego bufora pozostaje zgodna ze strumieniem, a bufor pozostaje ważny tylko do momentu wywołania innej metody strumienia lub zniszczenia strumienia.
- Zwrócony rozmiar bufora może mieć zerowy rozmiar, jeśli funkcja Next() wielokrotnie generuje bufor o rozmiarze innym niż zero.
virtual void LimitingInputStream::BackUp(
int count)
int count)
Tworzę kopię zapasową kilku bajtów, dzięki czemu kolejne wywołanie metody Next() ponownie zwraca dane, które zostały zwrócone przez ostatnie wywołanie funkcji Next().
Jest to przydatne, gdy piszesz procedury, które mają na celu odczytanie danych tylko do określonego punktu wejściowego, a potem zwracanie. Jeśli funkcja Next() zwraca bufor, który wykracza poza to, co chcesz przeczytać, możesz użyć funkcji BackUp(), aby wrócić do miejsca, w którym miała się zakończyć.
Warunki wstępne:
- Ostatnia wywoływana metoda to Next().
- liczba musi być mniejsza niż lub równa rozmiarowi ostatniego bufora zwróconego przez Next().
Warunki warunkowe:
virtual bool LimitingInputStream::Skip(
int count)
int count)
Pomija kilka bajtów.
Zwraca wartość „false”, jeśli koniec strumienia został osiągnięty lub wystąpił błąd dotyczący danych wejściowych. W przypadku strumienia typu end-stream strumień jest przesunięty do końca (np. funkcja ByteCount() zwraca całkowity rozmiar strumienia).