Сначала я приведу вам пример:
public interface LoginAuth{
public String encryptPassword(String pass);
public void checkDBforUser();
}
Теперь предположим, что у вас есть 3 базы данных в вашем приложении. Затем каждая реализация для этой базы данных должна определять два вышеуказанных метода:
public class DBMySQL implements LoginAuth{
// Needs to implement both methods
}
public class DBOracle implements LoginAuth{
// Needs to implement both methods
}
public class DBAbc implements LoginAuth{
// Needs to implement both methods
}
Но что, если encryptPassword () не зависит от базы данных, и для каждого класса одинаково? Вместо этого рассмотрим этот подход:
public abstract class LoginAuth{
public String encryptPassword(String pass){
// Implement the same default behavior here
// that is shared by all subclasses.
}
// Each subclass needs to provide their own implementation of this only:
public abstract void checkDBforUser();
}
Теперь в каждом дочернем классе нам нужно реализовать только один метод - метод, который зависит от базы данных.
Я старался изо всех сил и надеюсь, что это очистит ваши сомнения.
Самый простой способ - использовать
File("aaa").readBytes()
, который будет читать весь файл в ByteArray
. Но вы должны тщательно знать, что у вас достаточно оперативной памяти в куче, чтобы сделать это
ByteArray можно создать с помощью вызова ByteArray(100)
, где 100
- его размер
Для [ 115], вероятно, лучше использовать функцию readFully
, которая считывает именно запрошенное количество байтов.
Классический подход позволяет читать файл по частям, например,
val buff = ByteArray(1230)
File("aaa").inputStream().buffered().use { input ->
while(true) {
val sz = input.read(buff)
if (sz <= 0) break
///at that point we have a sz bytes in the buff to process
consumeArray(buff, 0, sz)
}
}