UWAGA: witryna została wycofana. Po 31 stycznia 2023 roku witryna zostanie wyłączona, a ruch będzie kierowany do nowej witryny na https://protobuf.dev. Do tego czasu aktualizacje będą dotyczyć tylko protobuf.dev.

zero_copy_stream_impl_lite.h

#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.
ZeroCopyInputStream, który opakowuje część innego strumienia i ogranicza ją do określonej liczby bajtów.

Użytkownicy plików

Te 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)

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)
Tworzy kopię zapasową liczby bajtów, więc następne wywołanie funkcji Next() ponownie zwraca dane, które zostały już zwrócone przez ostatnie wywołanie funkcji Next(). Więcej...
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)

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)

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)

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:

  • Ostatnie „count” bajty ostatniego bufora zwróconego przez Next() zostaną przeniesione z powrotem do strumienia. Kolejne wywołania Next() będą zwracać te same dane jeszcze przed wygenerowaniem nowych danych.

virtual bool ArrayInputStream::Skip(
        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)
Tworzy kopię zapasową kilku bajtów, dzięki czemu ostatni bufor zwrócony przez Next() nie jest w rzeczywistości zapisywany. więcej...
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)

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)

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)

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)
Tworzy kopię zapasową kilku bajtów, dzięki czemu ostatni bufor zwrócony przez Next() nie jest w rzeczywistości zapisywany. więcej...
virtual int64_t
ByteCount() const
Zwraca łączną liczbę bajtów zapisanych od momentu utworzenia tego obiektu.

explicit StringOutputStream::StringOutputStream(
        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)

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)

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

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)

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)
Tworzy kopię zapasową liczby bajtów, więc następne wywołanie funkcji Next() ponownie zwraca dane, które zostały już zwrócone przez ostatnie wywołanie funkcji Next(). Więcej...
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)

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)

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)

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:

  • Ostatnie „count” bajty ostatniego bufora zwróconego przez Next() zostaną przeniesione z powrotem do strumienia. Kolejne wywołania Next() będą zwracać te same dane jeszcze przed wygenerowaniem nowych danych.

virtual bool CopyingInputStreamAdaptor::Skip(
        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

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)
Tworzy kopię zapasową kilku bajtów, dzięki czemu ostatni bufor zwrócony przez Next() nie jest w rzeczywistości zapisywany. więcej...
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)

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)

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)

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)

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)
Tworzy kopię zapasową liczby bajtów, więc następne wywołanie funkcji Next() ponownie zwraca dane, które zostały już zwrócone przez ostatnie wywołanie funkcji Next(). Więcej...
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)

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)

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:

  • Ostatnie „count” bajty ostatniego bufora zwróconego przez Next() zostaną przeniesione z powrotem do strumienia. Kolejne wywołania Next() będą zwracać te same dane jeszcze przed wygenerowaniem nowych danych.

virtual bool LimitingInputStream::Skip(
        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).