2016-06-25 3 views
0

Как я могу перевернуть следующую строку кода Java на C++?Что такое эквивалент C++ для Java java.io.FileInputStream.read()?

FileInputStream fi = new FileInputStream(f); 
byte[] b = new byte[188]; 
int i = 0; 
while ((i = fi.read(b)) > -1)// This is the line that raises my question. 
{ 
// Code Block 
} 

Я пытаюсь запустить следующую строку кода, но это результат ошибки.

ifstream InputStream; 
unsigned char *byte = new unsigned char[188]; 
while(InputStream.get(byte) > -1) 
{ 
// Code Block 
} 
+1

[ 'станд :: ifstream'] (http://en.cppreference.com/w/cpp/io/basic_ifstream) ... Там в [ read] (http://en.cppreference.com/w/cpp/io/basic_istream/read) метод, унаследованный от 'std :: istream' – WhiZTiM

+0

java.io.FileInputStream.read() возвращает int, readstream() doesnt «т. –

+0

'std :: istream' имеет' readsome', который возвращает количество прочитанных байтов – tkausl

ответ

2

Вы можете использовать std::ifstream и использовать либо get() читать отдельные символы один за другим, или оператор извлечения >> для чтения любого заданного типа, который был бы в виде простого текста во входном потоке, или read(), чтобы читать последовательное количество байтов.

Обратите внимание, что вопреки java read() чтение C++ возвращает поток. Если вы хотите узнать количество прочитанных байтов, вы должны использовать gcount() или использовать readsome().

Таким образом, возможное решение может быть:

ifstream ifs (f); // assuming f is a filename 
char b[188]; 
int i = 0; 
while (ifs.read(b, sizeof(b))) // loop until there's nothing left to read 
{ 
    i = ifs.gcount(); // number of bytes read 
    // Code Block 
} 
+0

Я получаю эту ошибку, используя get(): 'ошибка: неверное преобразование из 'unsigned char *' в 'std :: basic_istream :: char_type {aka char}' [-fpermissive]' –

+0

@ LucasC.AlvesBittencourt извините, я думал, что вы хотите читать отдельные символы. Пожалуйста, см. Мое редактирование – Christophe

+0

Похоже, что это решило мою проблему. Большое спасибо. –

Смежные вопросы