использование части массива байтов

Чтобы сохранить значения в общих настройках:

SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = sp.edit();
editor.putString("Name","Jayesh");
editor.commit();

Чтобы получить значения из общих настроек:

SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
String name = sp.getString("Name", ""); // Second parameter is the default value.
17
задан bignose 12 June 2009 в 15:58
поделиться

5 ответов

Очень общий шаблон, когда работа с буферами:

Foo(byte[] data, int offset, int count) {...}

шаблон. Однако Вы не можете использовать это с SqlCommand / параметр, с тех пор когда Вы присваиваете параметру, он использует весь буфер. Вам будет нужен новый массив:

byte[] second = new byte[100];
Buffer.BlockCopy(first, firstOffset, second, 0, 100);
param.Value = second;
18
ответ дан 30 November 2019 в 13:21
поделиться

Если можно использовать linq:

SomeMethod(binBuffer.Take(100));
2
ответ дан 30 November 2019 в 13:21
поделиться

Короткий ответ: НЕТ. Что-либо, что Вы делаете (помимо передачи самого массива как параметр) создаст новый массив и скопирует первые 100 байтов в нем.

Однако, так как Вы не передаете массив значением, но вместо этого действительно ли передаете, ссылка на него, почему для Вас имеет значение, если массив составляет 256 байтов или 100? Вы не тратите впустую больше памяти. Вы, возможно, должны были бы сказать метод, сколько из того массива для использования, тем не менее, поскольку метод Длины возвратит полное.

РЕДАКТИРОВАНИЕ: я просто понял, что Вы хотите передать массив хранимой процедуре. Это скопирует целый массив. Необходимо будет сделать копию только с элементами, которые Вы хотите передать.

2
ответ дан 30 November 2019 в 13:21
поделиться

при использовании .net 3.5, можно использовать Взятие () дополнительный метод и сделать следующее:

class Program
{
    static void Main(string[] args)
    {
        byte[] b = new byte[1000];

        dowork(b.Take(10).ToArray());

    }

    public static void dowork(byte[] b)
    {
        // do some work
    }
}
1
ответ дан 30 November 2019 в 13:21
поделиться

Когда массив передается методу, только ссылка на него на самом деле передается, так как массивы являются на самом деле ссылочными типами. У Вас в основном есть указатель на массив, и затем смещение в квадратных скобках просто говорит Вам сколько "слотов" далеко от запуска. Поэтому единственный реальный способ сделать это должно было бы передать два параметра Вашему методу. Один являющийся фактическим массивом и вторым, являющимся макс. числом до, куда необходимо пойти в случае, это было бы 100. В том методе Вы тогда только выполняете итерации через массив, пока макс. число не достигнуто.

1
ответ дан 30 November 2019 в 13:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: